魔兽世界玄关求调
  • 板块灌水区
  • 楼主yitian_
  • 当前回复0
  • 已保存回复1
  • 发布时间2024/5/28 17:37
  • 上次更新2024/5/28 18:02:45
查看原帖
魔兽世界玄关求调
1263486
yitian_楼主2024/5/28 17:37

#include<bits/stdc++.h>
using namespace std;
 
int dx[4]={-1,0,1,0},dy[4]={0,1,0,-1};
 
char a[2000][2000];int b[2000][2000],cs[50][50],n,m,wyy,jbl;
 
bool flag=false;
 
void adg(char ds,int x,int y)
{
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            if(a[i][j]==ds&&i!=x&&j!=y)
            {
                wyy=i;
                jbl=j;  
                //cout << wyy << " " << jbl << endl;
                return ;
            }
        }
    }
}
 
void bfs(int p,int q)
{
    int x,y,h,t;
    int xb[100000],yb[100000],lg[90005];
    h=0;
    t=1;
    xb[1]=p;
    yb[1]=q; 
    lg[1]=0;
    b[p][q]=1;
    do
    {
        h++;
        for(int i=0;i<4;i++) 
        {
            x=xb[h]+dx[i];
            y=yb[h]+dy[i];
            if(x>=0&&x<n&&y>=0&&y<m&&b[x][y]==0&&a[x][y]!='1')
            {
                if(a[x][y]>=65&&a[x][y]<=90)
                {
                    t++;
                    adg(a[x][y],x,y);   
                    xb[t]=wyy;
                    yb[t]=jbl;
                    lg[t]=lg[h]+1;
                }       
                if(a[x][y]==48)
                {
                    t++;
                    xb[t]=x;
                    yb[t]=y;
                    lg[t]=lg[h] +1;
                    b[x][y]=1;
                } 
                if(x==n-1&&y==m-1)
                {
                    cout << lg[t];
                    flag=true;
                    return ;
                }
                //cout << xb[t] << " " << yb[t] << endl; 
            }
        } 
    }while(h<t); 
}
 
int main()
{
    cin >> n >> m;
    for(int i=0;i<n;i++)
    {
        string s;
        cin >> s;
        for(int j=0;j<m;j++)
        {
            a[i][j]=s[j];
        }
    }
    bfs(0,0); 
    /*for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            cout << a[i][j];
        }
        cout << endl;
    }*/
    if(flag==false) cout << "No Solution.";
    return 0; 
} 
2024/5/28 17:37
加载中...