1. 程式人生 > 其它 >年前最後一次2022.1.28_RP++

年前最後一次2022.1.28_RP++

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;
}
廣搜流讀入都比深搜跑得快無數倍