悬赏1元加关注求该dfs的错误
查看原帖
悬赏1元加关注求该dfs的错误
226167
呆呆的她啊楼主2023/11/1 20:02
#include<iostream>
#include<queue>
using namespace std;int n,m;
char map1[305][305];int u,v;int l,t;
int ans=0;int vis[305][305]={0};
int maxn=999999;
int tx[4]={0,-1,1,0};
int ty[4]={1,0,0,-1};
struct node
{
	int hang;
	int line;
}temp1,temp2;
queue<node>q;//使用结构体队列压入传送装置
void dfs(int u1,int v1,int step)
{
	for(int i=0;i<4;i++)
	{
		int xx=u1+tx[i];
		int yy=v1+ty[i];
		if(map1[xx][yy]=='#')continue;
		if(xx<=0||yy<=0)continue;
	else 	if(map1[xx][yy]=='.'&&vis[xx][yy]==0)
	{  // cout<<xx<<" "<<yy;cout<<endl;
		vis[xx][yy]=1;
		dfs(xx,yy,step+1);
		vis[xx][yy]==0;
		
	}
	else    if(map1[xx][yy]>='A'&&map1[xx][yy]<='Z')
	{
		for(int j=0;j<q.size();j++)
		{
			temp2=q.front();//开始传送如果是自己本身可以不能自己传自己直接continue
         if(xx==temp2.hang&&yy==temp2.line)continue;
			if(vis[xx][yy])continue;
			else 
		
			{
			//cout<<"传送";
				vis[xx][yy]=1;
			dfs(temp2.hang,temp2.line,step+1);	
				vis[xx][yy]=1;
			}
		}
	}
		else if(map1[xx][yy]=='=')
		{//cout<<"走完了";
		ans=min(maxn,step+1);return ;	
		}
		else if(map1[xx][yy]=='@')continue;		
	}	
}
int main()
{
	cin>>n>>m;
    for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			cin>>map1[i][j];
			if(map1[i][j]=='@')
			{
				u=i;
				v=j;
			}
			if(map1[i][j]>='A'&&map1[i][j]<='Z')
			{
				temp1.hang=i;
				temp1.line=j;
				q.push(temp1);	
			}
		}	
	}
	dfs(u,v,0);
	cout<<ans;	
	return 0;
}
2023/11/1 20:02
加载中...