玄关求调
  • 板块灌水区
  • 楼主yitian_
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/4/26 23:36
  • 上次更新2024/4/27 10:41:46
查看原帖
玄关求调
1263486
yitian_楼主2024/4/26 23:36

My code:

#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 lg[10005][5];
	h=0;
	t=1;
	lg[1][1]=p;
	lg[1][2]=q; 
	lg[1][3]=0;
	b[p][q]=1;
	do
	{
		h++;
	 	for(int i=0;i<4;i++) 
		{
			x=lg[h][1]+dx[i];
			y=lg[h][2]+dy[i];
			if(x>=0&&x<n&&y>=0&&y<m&&b[x][y]==0&&a[x][y]!='1')
			{
				if(a[x][y]!='0')
				{
					t++;
					adg(a[x][y],x,y);	
					lg[t][1]=wyy;
					lg[t][2]=jbl;
					lg[t][3]=lg[h][3]+1;
				}		
				else
				{
					t++;
					lg[t][1]=x;
					lg[t][2]=y;
					lg[t][3]=lg[h][3]+1;
					b[x][y]=1;
				} 
				if(x==n-1&&y==m-1)
				{
					cout << lg[t][3];
					flag=true;
					return ;
				}
				//cout << lg[t][1] << " " << lg[t][2] << 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/4/26 23:36
加载中...