经典算法之迷宫问题
2014-04-23 16:31
267 查看
//这是一个坑,有空再填
#define SIZE 10 int offset[4][2]={-1,0,0,1,1,0,0,-1}; typedef struct { int x; int y; int layer;//本位置接下来进栈的个数 }Stack; Stack array[SIZE*SIZE]; int visited[SIZE][SIZE]; int data[SIZE][SIZE]; int run_test(int PCB[SIZE][SIZE]) { int k=0,min=SIZE*SIZE+1; int i=0,j=0,a=-1,b=-1,c=-1,d=-1; // WRITE YOUR CODES HEAR for(i=0;i<SIZE*SIZE;i++) { array[i].x=-2; array[i].y=-2; array[i].layer=-2; } for(i=0;i<SIZE;i++) for(j=0;j<SIZE;j++) { data[i][j]=PCB[i][j]; visited[i][j]=0; if(PCB[i][j]==65)//A点 { a=i; b=j; } if(PCB[i][j]==66)//B点 { c=i; d=j; } } if( (a==-1 && b==-1) || (c==-1 && d==-1) ) return -1; data[c][d]=-10;//B点 /************************************BFS*******************************************/ int rear=0,front=1,x=0,y=0; array[0].x=a;//原点进栈 array[0].y=b; array[0].layer=0;// 初始化层数 while( !(array[rear].x==-2 && array[rear].y==-2) ) { x=array[rear].x;//获取栈中保存的坐标 y=array[rear].y; visited[ x ][ y ]=1; for(k=0;k<4;k++) { if( x+offset[k][0]>=0 && x+offset[k][0] < SIZE && y+offset[k][1]>=0 && y+offset[k][1] < SIZE && visited[ x+offset[k][0] ][ y+offset[k][1] ] ==0 ) { if( data[ x+offset[k][0] ][ y+offset[k][1] ] !=88 && data[ x+offset[k][0] ][ y+offset[k][1] ] !=65 && data[ x+offset[k][0] ][ y+offset[k][1] ] !=66 )//符合条件进栈 { array[front].x=x+offset[k][0]; array[front].y=y+offset[k][1]; array[front].layer=array[rear].layer+1; front++; } visited[ x+offset[k][0] ][ y+offset[k][1] ]=1;//该点被访问, 不可省略,特殊情况要考虑是否越界(chess越界) } } if(array[rear].layer>0) data[x][y]=array[rear].layer; rear++; } /**********************************************************************************/ min = data[ c+offset[k][0] ][ d+offset[k][1] ]; if(min==-10) return -1; else return min; } /*****************************************************************************************************************************************************************************/ int visited[M][M]={0}; void DFS(int x,int y, int array[M][M]) { int k=0,tmpx=0,tmpy=0; visited[x][y]=1; array[x][y]=2; for(k=0;k<4;k++) { tmpx=x+offset[k][0]; tmpy=y+offset[k][1]; if( tmpx >=1 && tmpx <= N && tmpy >=1 && tmpy <= N && visited[ tmpx ] [ tmpy ] ==0 ) { if( data[ tmpx ][ tmpy ]==1) DFS( tmpx , tmpy ,array); } } }
相关文章推荐
- 走迷宫问题 算法竞赛入门经典
- 学霸的迷宫-蓝桥杯算法提高-广搜 bfs 经典问题
- 蓝桥杯 算法提高 学霸的迷宫 经典BFS问题
- 回溯算法经典应用之—迷宫问题 (Java)
- 算法提高 学霸的迷宫 经典广搜bfs问题
- java经典问题算法大全
- 【LeetCode-面试算法经典-Java实现】【134-Gas Station(加油站问题)】
- 0-1背包问题经典算法(递归实现)
- 经典面试问题:12小球问题算法(文档)
- 经典算法之排序问题(二):桶排序、鸽巢排序
- 算法 迷宫问题
- 算法之使用递归求解迷宫问题
- 算法设计:经典八皇后问题之解决方案
- ACM经典算法之数学问题模板
- 基本算法复习之递归:经典问题举例
- Uva 101 the block problem 木块问题(算法竞赛经典入门)STL vector
- 经典程序算法问题
- 4个经典算法问题的shell表示
- 算法之路二:刘汝佳算法竞赛入门经典 3.4竖式问题
- 【动态规划法】解析经典算法题Two eggs problem及其延伸问题