POJ
来源:互联网 发布:金牛软件官网 编辑:程序博客网 时间:2024/06/07 20:41
【想法】题目简单,长宽都固定了下来,直接深搜就行。就是记录路径有点障碍,稍微一想就行,还是那句话:一个人可能有多个儿子,但是一定只有一个爸爸,所以每次搜索的时候直接记录当前节点的爸爸是谁就行,然后由最后依次向前统计出路径,压到栈中,反序输出就是答案了。因为起始点和终止点都固定了下来,所以可以用特征值直接扫出答案。
【代码】
#include <cstdio>#include <cstring>#include <cmath>#include <queue>#include <stack>using namespace std;int mat[10][10];int pre[10][10];struct P{ int x,y; P(int X,int Y):x(X),y(Y){}};queue<int>lu;int changex[4]={0,0,1,-1};int changey[4]={1,-1,0,0};int main(){ //freopen("in.txt","r",stdin); for(int i=0;i<5;i++) for(int j=0;j<5;j++) { scanf("%d",&mat[i][j]); pre[i][j]=i*1000+j; } lu.push(0); int x,y,cx,cy; while(!lu.empty()) { x=lu.front()/1000; y=lu.front()%1000; lu.pop(); for(int i=0;i<4;i++) { cx=x+changex[i]; cy=y+changey[i]; if(cx<0||cx>4||cy<0||cy>4||mat[cx][cy]) continue; else if(cx==4&&cy==4) { pre[cx][cy]=x*1000+y; break; } else if(pre[cx][cy]==cx*1000+cy) {//这个点没有搜索过 pre[cx][cy]=x*1000+y; lu.push(cx*1000+cy); } } } stack <P> ans; ans.push(P(4,4)); x=4,y=4; while(x||y) { cx=pre[x][y]/1000; cy=pre[x][y]%1000; ans.push(P(cx,cy)); x=cx,y=cy; } while(!ans.empty()) { printf("(%d, %d)\n",ans.top().x,ans.top().y); ans.pop(); } return 0;}
0 0
- POJ
- poj
- POJ
- POJ
- poj
- poj
- POJ
- POJ
- poj
- POJ
- POJ
- POJ
- POJ
- POJ
- POJ
- POJ
- POJ
- POJ
- boost的named_mutex的一些坑
- Mybatis工作原理
- Vector的特有功能
- Memcached和Redis缓存技术
- 1.7.ARM裸机第七部分-串口通信详解
- POJ
- HTTP的长连接和短连接
- 对象指针
- jzoj 5113 【usaco2017_Mar Platinum】COWBASIC
- shutil.rmtree()
- Oracle 12c 新特性之 数据库内归档(In-Database Archiving)
- 面试题四:替换空格
- Caffe CNN特征可视化
- navicat for mysql 破解方法