大牢们帮帮我
2024-06-16 16:24:51
发布于:北京
40阅读
0回复
0点赞
#include<bits/stdc++.h>
using namespace std;
char arr[101][101];
int xx[4]={-1,1,0,0},yy[4]={0,0,-1,1},crr[101][101],n,m;
struct stru{
int x,y,k;
};
struct stru1{
int x,y;
};
stack<stru1>st;
bool find(int x,int y)
{
if(x==1&&y==1)
return true;
for(int i=0;i<4;i++)
{
int tx=x+xx[i],ty=y+yy[i];
if(tx<1||tx>n||ty<1||ty>m)
continue;
if(crr[tx][ty]!=crr[x][y]-1&&arr[tx][ty]=='#')
continue;
st.push({tx,ty});
if(find(tx,ty))
return true;
st.pop();
}
return false;
}
int main()
{
memset(crr,-1,sizeof(crr));
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>arr[i];
crr[1][1]=0;
int step=-1;
queue<stru>q;
q.push({1,1,0});
while(!q.empty())
{
stru num=q.front();
q.pop();
int x=num.x,y=num.y,k=num.k;
if(x==n&&y==m)
{
step=k;
break;
}
for(int i=0;i<4;i++)
{
int tx=x+xx[i],ty=y+yy[i];
if(tx<1||tx>n||ty<1||ty>m)
continue;
if(arr[tx][ty]=='#'||crr[tx][ty]!=-1)
continue;
crr[tx][ty]=k+1;
q.push({tx,ty,k+1});
}
}
cout<<step<<endl;
st.push({n,m});
find(n,m);
while(!st.empty())
{
stru1 num=st.top();
cout<<'('<<num.x<<','<<num.y<<") ";
st.pop();
}
cout<<endl;
return 0;
}
全部评论 5
所以你在搜的时候完全不记录的是吧
2024-06-21 来自 广东
0甚至输入都错了(难绷
2024-06-21 来自 广东
0
2024-06-21 来自 广东
02024-06-21 来自 广东
0
6
6
6
6
62024-06-21 来自 广东
0代码在提交
2024-06-17 来自 广东
0过了
2024-06-17 来自 广东
0
有帮助,赞一个