求助!76分(应该是输入问题) 悬赏关注
查看原帖
求助!76分(应该是输入问题) 悬赏关注
934196
yonghang楼主2023/6/9 12:39
#include<bits/stdc++.h>
using namespace std;
const int N=350;
struct node{
    int x,y,step;
};
struct no{
	int x1,y1,x2,y2;
}cs[30];
queue<node>q;
int n,m,f[4][2]={{1,0},{-1,0},{0,1},{0,-1}},qx,qy,ex,ey;
char a[N][N];
bool vis[N][N];
int main()
{
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
        	cin>>a[i][j];
        	if(a[i][j]>='A'&&a[i][j]<='Z')
        	{
        		if(cs[a[i][j]-'A'+1].x1==0&&cs[a[i][j]-'A'+1].y1==0)
        		{
        			cs[a[i][j]-'A'+1].x1=i,cs[a[i][j]-'A'+1].y1=j;
				}
				else
				{
					cs[a[i][j]-'A'+1].x2=i;
					cs[a[i][j]-'A'+1].y2=j;
				}
			}
			else if(a[i][j]=='@') qx=i,qy=j;
			else if(a[i][j]=='=') ex=i,ey=j;
        }
    }
    vis[qx][qy]=true;
    q.push(node{qx,qy,0});
    while(!q.empty())
    {
    	node ha=q.front();
    	node t=ha;
    	q.pop();
    	if(a[ha.x][ha.y]=='=')
    	{
    		printf("%d",ha.step);
    		break;
		}
		if(a[ha.x][ha.y]>='A'&&a[ha.x][ha.y]<='Z')
    	{
    		if(cs[a[ha.x][ha.y]-'A'+1].x1==ha.x&&cs[a[ha.x][ha.y]-'A'+1].y1==ha.y)
    		{
    			ha.x=cs[a[t.x][t.y]-'A'+1].x2;
				ha.y=cs[a[t.x][t.y]-'A'+1].y2;
    		//	vis[cs[a[ha.x][ha.y]-'A'+1].x2][cs[a[ha.x][ha.y]-'A'+1].y2]=true;
			}
			else
			{
				ha.x=cs[a[t.x][t.y]-'A'+1].x1;
				ha.y=cs[a[t.x][t.y]-'A'+1].y1;
		//		vis[cs[a[ha.x][ha.y]-'A'+1].x1][cs[a[ha.x][ha.y]-'A'+1].y1]=true;
			}
		//	continue;
		}
    	for(int i=0;i<4;i++)
    	{
    		int tx=ha.x+f[i][0],ty=ha.y+f[i][1],ts=ha.step+1;
    		if(tx>=1&&ty>=1&&tx<n&&ty<m&&!vis[tx][ty]&&a[tx][ty]!='#')
    		{
    			q.push(node{tx,ty,ts});
    			vis[tx][ty]=true;
			}
			
		}
    }
}
2023/6/9 12:39
加载中...