题意:搜索,已知起点和终点,求石子从起点到达终点的最短路,如果无法到达,则输出-1。石子移动的具体规则如下:
6,用dfs
代码:
#include<iostream>
using namespace std;
int map[30][30];
int r,c,ans;
int dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
void dfs(int px,int py,int count)
{
int nr,nc;
if(count>10||count>ans) return;
for(int i=0;i<4;i++)
{
nr=px;nc=py;
if(map[nr+dir[i][0]][nc+dir[i][1]]!=1)
{
while(map[nr+dir[i][0]][nc+dir[i][1]]!=1)
{
nr=nr+dir[i][0];
nc=nc+dir[i][1];
if(!(nr>=1&&nr<=r&&nc>=1&&nc<=c))
{
break;
}
if(map[nr][nc]==3)
{
if(count+1<ans)
{
ans=count+1;
}
return ;
}
}
if(nr>=1&&nr<=r&&nc>=1&&nc<=c)
{
map[nr+dir[i][0]][nc+dir[i][1]]=0;
dfs(nr,nc,count+1);
map[nr+dir[i][0]][nc+dir[i][1]]=1;
}
}
}
}
int main()
{
int sr,sc,i,j;
while(cin>>c>>r,r,c)
{
memset(map,0,sizeof(map));
for(i=1;i<=r;i++)
for(j=1;j<=c;j++)
{
cin>>map[i][j];
if(map[i][j]==2)
{sc=j;sr=i;}
}
ans=9999;
dfs(sr,sc,0);
if(ans>10) cout<<-1<<endl;
else cout<<ans<<endl;
}
return 0;
}
本文探讨了一种使用深度优先搜索(DFS)算法解决迷宫问题的方法,其中石子作为探索者从起点出发寻找到达终点的最短路径。详细介绍了石子移动的规则和限制条件,包括移动方向、障碍物交互、边界检测以及移动次数限制。通过代码实例展示了如何实现DFS算法来解决此类问题,并提供了成功案例和失败情况的示例。

3050

被折叠的 条评论
为什么被折叠?



