#include
using namespace std;
char a[100][100];
bool vis[100][100];
int dx[4]={0,0,1,-1},dy[4]={1,-1,0,0};
struct Edge
{
int i,j,h;
};
bool is_legal(int x,int y)
{
if(x>=0&&x<30&&y>=0&&y<60)
return true;
else
return false;
}
int bfs(int x,int y)
{
queue q;
q.push({x,y,0});
vis[x][y]=true;
while(!q.empty())
{
Edge p=q.front();
q.pop();
if(p.i==29&&p.j==59)
{
return p.h;
}
if(vis[p.i][p.j]) continue;
vis[p.i][p.j]=true;
for(int i=0;i<4;i++)
{
int nx=p.i+dx[i];
int ny=p.j+dy[i];
if(is_legal(nx,ny)&&a[nx][ny]=='1')
{
q.push({nx,ny,p.h+1});
}
}
}
}
int main()
{
for(int i=0;i<30;i++)
{
for(int j=0;j<60;j++)
{
cin>>a[i][j];
}
}
int sum=0;
for(int i=0;i<30;i++)
{
for(int j=0;j<60;j++)
{
if(!vis[i][j]&&a[i][j]=='1')
{
sum=max(sum,bfs(i,j));
}
}
}
cout<return 0;
}
https://blog.csdn.net/hesorchen/article/details/104113819 参考下