luoguP1162填塗顏色

2022-07-31 20:21:11 字數 1866 閱讀 7240

題目鏈結

這道題剛開始打的暴力,64分。

#include#include#include#includeusing namespace std;

const int n = 30;

int n, a[n][n], last[n];

int main () }}

for(int i = 0; i < n ; i ++)

}for(int i = 0 ; i < n ; i ++)

printf("\n");

}return 0;

}

不知道**出了錯,開始想正解

沒想出來然後看了題解沒看懂(果然oier不適合看別人的**)

但是大體思路了解了

廣度優先搜尋bfs

#include#include#include#includeusing namespace std;

const int n = 30;

int n, a[n][n], last[n];

int dx[4] = ;

int dy[4] = ;

void bfs(int x, int y)

}void print()

printf("\n");

}}void read()

int main()

然鵝把這份**交上去,32分,還沒有剛開始打的暴力高。

0 0 0 1 0 1 0 0

0 0 0 1 0 1 0 0

1 1 1 1 0 1 0 0

1 0 0 0 0 1 0 0

1 0 0 0 0 1 0 0

1 0 0 0 0 1 0 0

1 1 1 1 1 1 0 0

但是題解的**沒有問題。

(陷入思考)

發現邊界問題很重要

把所有輸入輸出都調成1 = 1; i <= n

#include#include#include#includeusing namespace std;

const int n = 30;

int n, a[n][n], last[n];

int dx[4] = ;

int dy[4] = ;

bool book[n][n];

void bfs(int x, int y)

}void print()

printf("\n");

}}void read()

int main()

發現乙個破綻,即使輸入輸出的時候用了1到n,在矩陣的上下左右都留出了一列0,但是在搜尋的時候只用到了左邊和上面邊界為0來繞過這堵牆,右面和下邊還是沒有用到。

#include#include#include#includeusing namespace std;

const int n = 32;

int n, a[n][n], last[n];

int dx[4] = ;

int dy[4] = ;

bool book[n][n];

void bfs(int x, int y)

}void print()

printf("\n");

}}void read()

int main()

這段**和上一段唯一的區別就是把dfs裡面的「判斷邊界」x > n || y > n

改成了x > n + 1 || y > n + 1使搜尋的時候在右面和下面也可以繞過這堵牆。

最終ac了。

真是一波三折搞人心態。

luogu P1162 填塗顏色

由數字0組成的方陣中,有一任意形狀閉合圈,閉合圈由數字1構成,圍圈時只走上下左右4個方向。現要求把閉合圈內的所有空間都填寫成2.例如 6 6的方陣 n 6 塗色前和塗色後的方陣如下 0 0 0 0 0 0 0 0 1 1 1 1 0 1 1 0 0 1 1 1 0 0 0 1 1 0 0 0 0 1...

搜尋 luoguP1162 填塗顏色

題目 一道很裸的搜尋題 我們可以一開始把所有的零賦值成2 然後從四條邊界往裡搜 所有與邊界相鄰的2 能搜到的2 都賦值成0即可 最後輸出整個矩陣 如下 include include include using namespace std define in read typedef long lo...

Luogu P1162 填塗顏色題解

問題分析 分析題目可得此問題為連通塊問題 因此題列舉被包圍的 0 較難 所以可用列舉每乙個不被包圍的 0 設計程式 1 include2 include3 include4 include5 include6 using namespace std 7const int n 30 5 8 intn,...