poj 3009
来源:互联网 发布:java求100 200的素数 编辑:程序博客网 时间:2024/05/17 22:40
题意:给定一个m*n的网格,在这些网格上一些地方有障碍物,给定起点与终点的位置,当石头从起点开始走,撞上障碍才会转弯,否则会一直沿着来时的方向继续前进。撞到障碍后停在障碍前的位置,障碍消失。然后石头可以选择四个方向(相邻处无障碍的方向)前进,问至少需要停多少次才能从起点到达终点。不能到达或者多余10步后游戏失败。如果能到达输出最少的步数,否则输出-1.
思路:dfs。此题刚开始的时候选择方向加值时直接加导致一直不对。需要先判断下一个点是否符合条件之后在选择该方向。用C++交RE,改为G++后就过了,这个没有想明白为啥?不会跟RP有关系吧!!
#include<iostream>#include<stdio.h>#include<stdio.h>#include<string.h>using namespace std;int vis[25][25];int n,m;int sx,sy,ex,ey;int flag,sumStep;//flag标记是否找到路径,sumStep记录总的步数int move[4][2]= {1,0,0,1,-1,0,0,-1}; //移动的方向void dfs(int x,int y,int step)//当前位置,步数{ int tx,ty; if(step>=10) return ; for(int i=0; i<4; i++) { if(!vis[x+move[i][0]][y+move[i][1]]) { tx=x; ty=y; while(!vis[tx+move[i][0]][ty+move[i][1]])//判断下一个节点是否是障碍 { tx=tx+move[i][0];//符合条件才加,刚开始直接加了一直没有对 ty=ty+move[i][1]; if(tx==ex&&ty==ey) { if(sumStep>step+1) sumStep=step+1; flag=1; return ; } if(tx<0||tx>=n||ty<0||ty>=m)//判断越界 break; } if(tx>=0&&tx<n&&ty>=0&&ty<m&&step+1<10)//与障碍撞上后 { vis[tx+move[i][0]][ty+move[i][1]]=0;//去除障碍 dfs(tx,ty,step+1); vis[tx+move[i][0]][ty+move[i][1]]=1;//回溯 } } }}int main(){ int i,j; while(cin>>m>>n) { if(n==0&&m==0) break; memset(vis,0,sizeof(vis)); for(i=0; i<n; i++) for(j=0; j<m; j++) { cin>>vis[i][j]; if(vis[i][j]==2) { sx=i; sy=j; vis[i][j]=0; } if(vis[i][j]==3) { ex=i; ey=j; vis[i][j]=0; } } flag=0; sumStep=99999999; dfs(sx,sy,0); if(!flag) cout<<-1<<endl; else cout<<sumStep<<endl; } return 0;}
- POJ 3009
- poj 3009
- POJ 3009
- POJ 3009
- POJ-3009
- POJ 3009
- POJ 3009
- poj-3009
- poj--3009
- poj 3009
- POJ 3009
- poj-3009
- poj 3009
- POJ 3009
- poj 3009
- 【POJ】3009
- POJ 3009
- poj 3009
- 杭州烟花事故可能因燃放公司不熟环境-杭州-烟花事故
- Eclipse debug报ThreadPoolExecutor$Worker.run() exception
- MySQL远程连接ERROR 2003 (HY000):Can't connect to MySQL server on'XXXXX'(111) 的问题
- C++ 异常处理基础(1)
- HTTP协议
- poj 3009
- 查找吸血鬼数字菜鸟级写法
- 第二讲 HTTP协议---张国亮--->总结心德
- 韩媒称韩国海警用橡皮弹打死1名中国船员
- Discover the secrets of the Java Serialization API
- CSDN高校俱乐部2012年秋季巡讲安排及讲师介绍
- cPanel添加绑定第二个域名或更多域名_暂时未成功
- android 手机 华为c8650e 无法在mac下 utuntu 下调试 googole调试模式 #*#*
- POJ 2752、2406、1961 KMP的next[](或p[])简单应用