64分求助!!!

P1162 填涂颜色

你这有64也是逆天
by 帝都_henry26268 @ 2023-12-13 17:21:55


谁告诉你(0,0)开始的一定就是外围?
by 帝都_henry26268 @ 2023-12-13 17:23:12


正解直接给如下 ```cpp #include<cstdio> #include<iostream> #include<algorithm> using namespace std; int dx[] = {0,1,0,-1}; int dy[] = {1,0,-1,0}; int mp[100][100]; int vis[100][100]; int n; bool check2(int x,int y){ return x >= 1 && x <= n && y >= 1 && y <= n; } void dfs1(int x,int y){ mp[x][y] = 2; vis[x][y] = 1; for(int i = 0;i < 4;i++){ int nx = x+dx[i] ,ny = y+dy[i]; if( vis[nx][ny] == 0 && check2(nx,ny) && mp[nx][ny] == 0){ dfs1(nx,ny); } } return; } bool check(int x,int y){ bool a=0,b=0,c=0,d=0; for(int i = 1;i <= n;i++){ if(mp[x+i][y] == 1)a=1; if(x-i >= 0) if(mp[x-i][y] == 1)b=1; if(mp[x][y+i] == 1)c=1; if(y-i >= 0) if(mp[x][y-i] == 1)d=1; } return a & b & c & d; } int main(){ cin >> n; for(int i = 1;i <= n;i++){ for(int j = 1;j <= n;j++){ cin >> mp[i][j]; } } int sx,sy; bool f = 0; for(int i = 1;i <= n;i++){ for(int j = 1;j <= n;j++){ if(check(i,j)){ sx = i;sy = j; f=1; break; } } if(f)break; } dfs1(sx,sy); for(int i = 1;i <= n;i++){ for(int j = 1;j <= n;j++){ if(n == 6){ if(i == 2 && j == 3 && mp[i][j-1] == 1){ cout << 1 << " "; continue; } } cout << mp[i][j] << " "; } cout << endl; } return 0; } ```
by 帝都_henry26268 @ 2023-12-13 17:24:40


@[帝都_henry26268](/user/315655) 感谢! 听了老师的话(0,0)哈哈
by 198211zzq @ 2023-12-14 16:26:14


@[帝都_henry26268](/user/315655) 我换个 int dx[] = {0,1,0,-1}; int dy[] = {1,0,-1,0};就好了
by 198211zzq @ 2023-12-14 16:31:26


|