POJ_3984经典迷宫问题
2015-07-22 17:54
274 查看
//记录路径//
AC代码:
AC代码:
#include<stdio.h> #include<string.h> #define max 10 int map[max][max]; int vis[max][max]; int dir[4][2]={{1,0},{0,1},{-1,0},{0,-1}}; struct node { int x,y; }queue[max*max]; int a[max*max]; int b[max*max]; int cnt; int p[max*max]; void print(int k) { int i; int t=p[k]; if(t==0) { printf("(0, 0)\n"); printf("(%d, %d)\n",a[k],b[k]); } else { print(t); printf("(%d, %d)\n",a[k],b[k]); } } void bfs(int x,int y) { struct node now,pre; queue[0].x=0; queue[0].y=0; int e=0,h=1; p[0]=-1; while(e<h) { pre=queue[e]; if(pre.x==4&&pre.y==4) { print(e); return; } int i; for(i=0;i<4;i++) { now.x=pre.x+dir[i][0]; now.y=pre.y+dir[i][1]; if(now.x>=0&&now.x<5&&now.y>=0&&now.y<5&&!vis[now.x][now.y]&&map[now.x][now.y]==0) { vis[now.x][now.y]=1; queue[h]=now; a[h]=now.x; b[h]=now.y; p[h]=e; h++; } } e++; } return; } int main() { int i,j; cnt=0; for(i=0;i<5;i++) { for(j=0;j<5;j++) { scanf("%d",&map[i][j]); } } memset(vis,0,sizeof(vis)); bfs(0,0); return 0; }
相关文章推荐
- Android 开发 之 Fragment 详解
- log4j使用介绍
- 根据日期返回星期几
- [leedcode 112] Path Sum
- 如何提高并发度?读写锁,分拆锁、分离锁,ThreadLocal,copyOnWrite,工作队列 per thread, 工作窃取
- 访问数据库 委托事件返回数据
- 访问数据库 委托事件返回数据
- 虚函数的实现原理
- IIS上发布网站遇到的问题总结
- MySQL 最基本的SQL语法/语句(转发)
- Unity3D学习笔记-----2015-07-22(Unity3D基本使用)
- D - How Many Answers Are Wrong(hdu 3038)
- Virtualbox中Ubuntu设置共享文件夹
- HBase:Hadoop Database
- PHP时间比较和时间差计算
- 第十七周oj刷题——Problem O: B C++时间类的运算符重载
- spring和springMVC中xml文件信息
- C++不懂得名词用法
- Python之dir()与__dict__的区别
- Table 9-5 -- coeff_token mapping to TotalCoeff(coeff_token) and TrailingOnes(coeff_token)