年前最後一次2022.1.28_RP++
阿新 • • 發佈:2022-01-28
T1同昨
T2一開始想用深搜,結果T掉了。。。只好改廣搜,就挺令人頭大
點選檢視寬廣對比
#include<bits/stdc++.h> using namespace std; int sum,n; int a[50][50]; bool vis[50][50]; void dfs(int x,int y) { if(x>n+1||y>n+1||x<0||y<0)return; if(a[x][y])return; a[x][y]=2; vis[x][y]=1; dfs(x+1,y); dfs(x,y+1); dfs(x-1,y); dfs(x,y-1); return; } int main() { scanf("%d",&n); for(int i=1; i<=n; i++) { for(int j=1; j<=n; j++) { scanf("%d",&a[i][j]); if(a[i][j]==1)sum++; } } dfs(0,0);//橫縱座標 for(int i=1; i<=n; i++) { for(int j=1; j<=n; j++) { if(a[i][j]==1) printf("1 "); if(a[i][j]==2) printf("0 "); if(a[i][j]==0) printf("2 "); } printf("\n"); } return 0; }
點選檢視寬廣對比
#include<bits/stdc++.h> using namespace std; char a[1010][1010]; int sum,mi; int gox[4]= {1,-1,0,0},goy[4]= {0,0,1,-1},h[1000001][4]; int n,qx,qy,zx,zy; int bfs(int x,int y) { int tail=1,head=0,xx,yy; h[1][1]=x; h[1][2]=y; h[1][3]=0; while(tail>head) { head++; for(int i=0; i<4; i++) { xx=h[head][1]+gox[i]; yy=h[head][2]+goy[i]; if(xx==zx&&yy==zy) { return h[head][3]+1; } if(xx>=1&&yy>=1&&xx<=n&&yy<=n&&a[xx][yy]=='0') { tail++; a[xx][yy]='1'; h[tail][1]=xx; h[tail][2]=yy; h[tail][3]=h[head][3]+1; } } } } int main() { cin>>n; for(int i=1; i<=n; i++) for(int j=1; j<=n; j++) cin>>a[i][j]; cin>>qx>>qy>>zx>>zy; printf("%d",bfs(qx,qy)); return 0; }