6分?求大佬指点
查看原帖
6分?求大佬指点
478766
zhongboxuan123楼主2022/7/15 17:24
#include<bits/stdc++.h>
using namespace std;
int n,m,sx,sy,ex,ey;
struct node{
	int x,y,s;	
};
char a[10000][10000];
int ne[4][2]={{-1,0},{1,0},{0,1},{0,-1}};
node que[100100];
void cs(int &tx,int &ty){
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++){
			if(a[i][j]==a[tx][ty] && (i!=tx || j!=ty)){
				tx=i;
				ty=j;
			}
	}
	return ;
}
int bfs(){
	int head=0,tail=0;
	que[tail].x=sx;
	que[tail].y=sy;
	que[tail].s=0;
	a[sx][sy]='#';
	tail++;
	node f,r;
	while(head<tail){
		f=que[head];
		head++;
		for(int i=0;i<4;i++){
			int tx=f.x+ne[i][0];
			int ty=f.y+ne[i][1];
			if(tx>=1 && tx<=n && ty>=1 && ty<=m && a[tx][ty]=='.' && a[tx][ty]!='#' ){
				if(a[tx][ty]>='A' && a[tx][ty]<='Z'){
					cs(tx,ty);
			    }
				a[tx][ty]='#';
				r={tx,ty,f.s+1};
				que[tail]=r;
				tail++;
			}
			if(que[tail].x==ex && que[tail].y==ey){
				return que[tail].s;
			}
		}
		
	}
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>a[i][j];
			if(a[i][j]=='@'){
				sx=i;
				sy=j;
			}
			if(a[i][j]=='='){
				ex=i;
				ex=j;
			}
		}
	}
	cout<<bfs()-1;
}

广搜写完6分。。。

2022/7/15 17:24
加载中...