題目鏈結
這道題剛開始打的暴力,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,...