迷宫的最短路径

静谧飘零 2012-03-12 04:55:33
描述: 设计一个算法找一条从迷宫入口到出口的最短路径。
输入: 迷宫的行和列m n
迷宫的布局
输出: 最短路径
输入样例: 请输入迷宫的行和列:6 8
请输入迷宫的布局:
0 1 1 1 0 1 1 1
1 0 1 0 1 0 1 0
0 1 0 0 1 1 1 1
0 1 1 1 0 0 1 1
1 0 0 1 1 0 0 0
0 1 1 0 0 1 1 0
输出样例: 最短路径为:
(6,8)(5,7)(4,6) (4,5)(3,4) (3,3) (2,2)(1,1)

...全文
165 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuliufen 2012-03-12
  • 打赏
  • 举报
回复
楼上的代码只是求最短步数,再扩展下,由生成的二维矩阵再反着寻找回去就能知道路径上的每个点了;
laoyang103 2012-03-12
  • 打赏
  • 举报
回复
哦 准确的说应是最短路径步数 呵呵 修正一下 你也不给个连接地址

还是我自己上题吧
http://acm.tzc.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=1005
#include <stdio.h>
#include <string>
#include <deque>
using namespace std;
struct Point
{
int x;
int y;
};
struct Node
{
char c;
int step;
Point pt;
bool foot;
};
Node path[21][21] = {0};
int d[4][2] = {{0,1},{1,0},{0,-1},{-1,0}};
int main()
{
int m,n,time;
int i,j,k;
while(EOF != scanf("%d %d %d",&n,&m,&time))
{
getchar();
if(m == 0&& n ==0 && time == 0)
break;
Point start,end;
for(i = 0;i<m;i++)
{
for(j = 0;j<n;j++)
{
scanf("%c",&path[i][j].c);
if(path[i][j].c == 'S')
{
path[i][j].pt.x = i;
path[i][j].pt.y = j;
start.x = i;
start.y = j;
}
else if(path[i][j].c == 'P')
{
path[i][j].pt.x = i;
path[i][j].pt.y = j;
end.x = i;
end.y = j;
}
else
{
path[i][j].pt.x = i;
path[i][j].pt.y = j;
}
}
getchar();
}
deque<Node> q;
q.push_back(path[start.x][start.y]);
path[start.x][start.y].foot = true;
while(!q.empty())
{
Node temp = q.front();
if(temp.pt.x == end.x && temp.pt.y == end.y)
{
if(temp.step <= time)
printf("YES\n");
else
printf("NO\n");
break;
}
q.pop_front();
for(i = 0;i<4;i++)
{
if(temp.pt.x+d[i][0] >=0 && temp.pt.x+d[i][0] < m &&
temp.pt.y+d[i][1] >=0 && temp.pt.y+d[i][1] < n &&
path[temp.pt.x+d[i][0]][temp.pt.y+d[i][1]].c != '*'&&
!path[temp.pt.x+d[i][0]][temp.pt.y+d[i][1]].foot)
{
path[temp.pt.x+d[i][0]][temp.pt.y+d[i][1]].step = temp.step+1;
q.push_back(path[temp.pt.x+d[i][0]][temp.pt.y+d[i][1]]);
path[temp.pt.x+d[i][0]][temp.pt.y+d[i][1]].foot = true;
}
}
}
memset(path,0,sizeof(path));
if(q.empty())
printf("NO\n");
}
return 0;
}


虽然写的有点繁琐 不过那是题目的要求有点恶心 将就着看吧 呵呵
laoyang103 2012-03-12
  • 打赏
  • 举报
回复
你认为该怎么办 其实对于无权图的最短路径广度优先搜索最简单

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧