暑假集训第三周第二阶段搜索 G - 迷宫问题
2015-08-01 13:58
369 查看
G - 迷宫问题
Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d
& %I64u
Submit Status Practice POJ
3984
Description
定义一个二维数组:
它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。
Input
一个5 × 5的二维数组,表示一个迷宫。数据保证有唯一解。
Output
左上角到右下角的最短路径,格式如样例所示。
Sample Input
Sample Output
分析:
越来越感觉学习起来很吃力,很多东西都不懂。
只是一道迷宫问题典型的广搜问题,里边还用了模拟队列。各种方法,各种不理解,我什么时候可以会啊
Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d
& %I64u
Submit Status Practice POJ
3984
Description
定义一个二维数组:
int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, };
它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。
Input
一个5 × 5的二维数组,表示一个迷宫。数据保证有唯一解。
Output
左上角到右下角的最短路径,格式如样例所示。
Sample Input
0 1 0 0 0 0 1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 0 1 0
Sample Output
(0, 0) (1, 0) (2, 0) (2, 1) (2, 2) (2, 3) (2, 4) (3, 4) (4, 4)
分析:
越来越感觉学习起来很吃力,很多东西都不懂。
只是一道迷宫问题典型的广搜问题,里边还用了模拟队列。各种方法,各种不理解,我什么时候可以会啊
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
#include<stdio.h> #include<string.h> void print (int value ,int prev[25]) { if(value>=0) { int x=value/5; int y=value%5; print(prev[value],prev); printf("(%d, %d)\n",x,y); } } void solve (int m[5][5]) { int v[5][5],queue[25],f=0,r=0,x=0,y=0,prev[25]; memset(v,0,sizeof(v)); memset(prev,-1,sizeof(prev)); prev[0]=-1; int of[4][2]= {1,0,-1,0,0,-1,0,1}; queue[++r]=0; v[x][y]=1; while(f<=r) { int i,newx,newy; f++; x=queue[f]/5; y=queue[f]%5; for(i=0; i<4; i++) { newx=x+of[i][0]; newy=y+of[i][1]; if(newx>=0&&newx<5&&newy>=0&&newy<5&&!v[newx][newy]&&!m[newx][newy]) { r=(r+1)%25; queue[r]=newx*5+newy; prev[newx*5+newy]=x*5+y; v[newx][newy]=1; } } } print(24,prev); } int main() { int m[5][5],i=0,j=0; while(scanf("%d",&m[i][j++])!=EOF) { if(j==5) { i++; j=0; } if(i==5) { solve(m); i=0; } } return 0; }
相关文章推荐
- Transformation 能将 Windows XP/Server 2003 操作系统,完美地模拟成 Windows Vista 的软件
- 用javascript和css模拟select的脚本
- javascript用层模拟可移动的小窗口
- 自编jQuery插件实现模拟alert和confirm
- javascript 模拟点击广告
- JQuery中模拟image的ajaxPrefilter与ajaxTransport处理
- php实现模拟post请求用法实例
- JavaScript实现MIPS乘法模拟的方法
- 模拟xcopy的函数
- php模拟服务器实现autoindex效果的方法
- C# SendInput 模拟鼠标操作的实现方法
- PHP模拟登陆163邮箱发邮件及获取通讯录列表的方法
- php模拟登陆的实现方法分析
- php模拟用户自动在qq空间发表文章的方法
- php 模拟 asp.net webFrom 按钮提交事件实例
- php模拟post提交数据的方法
- JavaScript模拟重力状态下抛物运动的方法
- JavaScript模拟实现键盘打字效果
- JavaScript模拟深蓝vs卡斯帕罗夫的国际象棋对局示例
- python模拟enum枚举类型的方法小结