求调代码,c++上直接停止工作了
查看原帖
求调代码,c++上直接停止工作了
580202
Siegerkranz_2735楼主2022/7/18 11:37
#include<bits/stdc++.h>
using namespace std;
struct point{
	int x,y;
}start,end;
int P[4][2]={{1,0},{0,1},{-1,0},{0,-1}};
int mp[310][310],m,n,ans;
char x;
point trans[130][2];
int trans_num[130];
int dfs(point now,int time){
	if(now.x==end.x&&now.y==end.y){
		ans=min(time,ans);
	}
	for(int i=0;i<=3;i++){
		if(mp[now.x+P[i][0]][now.y+P[i][1]]){
			if(trans[mp[now.x+P[i][0]][now.y+P[i][1]]][0].x&&trans[mp[now.x+P[i][0]][now.y+P[i][1]]][1].x){
				if(trans[mp[now.x+P[i][0]][now.y+P[i][1]]][0].x==now.x&&trans[mp[now.x+P[i][0]][now.y+P[i][1]]][0].y==now.y){
					dfs(trans[mp[now.x+P[i][0]][now.y+P[i][1]]][1],time+1);
				}
				else{
					dfs(trans[mp[now.x+P[i][0]][now.y+P[i][1]]][0],time+1);
				}
			}
			else{
				point f5_now;
				f5_now.x=now.x+P[i][0];
				f5_now.y=now.y+P[i][1];
				dfs(f5_now,time+1);
			} 
		}
	}
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>x;
			if(x=='#'){
				mp[i][j]=0;
				continue;
			}
			if(x=='.'){
				mp[i][j]=1;
				continue;
			}
			if(x=='@'){
				mp[i][j]=1;
				start.x=i,start.y=j;
				continue;
			}
			if(x=='='){
				mp[i][j]=1;
				end.x=i,end.y=j;
				continue;
			}
			else{
				mp[i][j]=(int)x;
				trans[(int)x][trans_num[(int)x]].x=i;
				trans[(int)x][trans_num[(int)x]].y=j;
				trans_num[(int)x]++;
				continue;
			}
		}
	}
	dfs(start,0);
	return 0;
}
2022/7/18 11:37
加载中...