彩虹40求
查看原帖
彩虹40求
1311900
Greeper楼主2024/10/4 16:46
#include<bits/stdc++.h>
using namespace std;
char mp[305][305];
int n,m;
int f[305][305];
int gx[5]={0,1,0,-1,0},gy[5]={0,0,1,0,-1};
int bfs()
{
    queue<int> x;
    queue<int> y;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            if(mp[i][j]=='@')
                x.push(i),y.push(j);
    while(!x.empty())
	{
        int nx=x.front(),ny=y.front();
        x.pop();y.pop();
        for(int i=1;i<=4;i++)
        {
            int tx=nx+gx[i],ty=ny+gy[i];
            if(tx>=1&&tx<=n&&ty>=1&&ty<=m)
            {
                if(mp[tx][ty]=='.'&&!f[tx][ty])
                {
                    f[tx][ty]=f[nx][ny]+1;
                    x.push(tx);y.push(ty);
                }
                if(mp[tx][ty]=='=')
                {
                	f[tx][ty]=f[nx][ny]+1;
                    return f[nx][ny]+1;
                }
                if(mp[tx][ty]>='A'&&mp[tx][ty]<='Z'&&!f[tx][ty])
                {
                	char c=mp[tx][ty];
                	f[tx][ty]=f[nx][ny]+1;
                	for(int i=1;i<=n;i++)
                	{
            			for(int j=1;j<=n;j++)
            			{
            				if(mp[i][j]==c&&(i!=tx||j!=ty))
            				{
            					f[i][j]=f[nx][ny]+1;
            					x.push(i);y.push(j);
            				}
    					}
            		}
    			}
            }
        }
    }
}
int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            cin>>mp[i][j];
    cout<<bfs()<<endl;
//    for(int i=1;i<=n;i++)
//    {
//    	for(int j=1;j<=m;j++)
//    	{
//    		cout<<f[i][j]<<' ';
//		}
//		cout<<endl;
//	}
    return 0;
}

2024/10/4 16:46
加载中...