hdu 1026 Ignatius and the Princess I(迷宫)
来源:互联网 发布:图标制作软件 编辑:程序博客网 时间:2024/05/06 16:30
链 接:点击打开链接
题 意:Ignatius去到一个n*m密宫求公主,他要从(0,0)点走到(n-1,m-1)点,每走一个点代表一秒,求花费的最少时间
其中 . :代表可以走 X :代表陷阱不可以走 n:代表有n个妖怪,走此处要花费n秒杀怪
思 路:广度优先搜索 + 优先队列(每次从队列中选步数最少的) + 递归打印路径
代 码:
#include<iostream>#include<string.h>#include<string>#include<queue>#include<stdio.h>using namespace std;struct node{int x,y,step;friend bool operator<(node n1,node n2)//优先选步数少的 {return n2.step<n1.step;}}s;char map[200][200];int visited[200][200];int N,M;int dir[4][2]={-1,0,1,0,0,-1,0,1};int flag=0;//标记是否能到 int path[200][200];//保存路径int time;int guai[200][200];//怪的个数 int bfs(){priority_queue<node>q;node temp,m;s.x=0;s.y=0;s.step=0;visited[s.x][s.y]=-1;q.push(s);while(!q.empty()){temp=q.top();//优先队列出队为top q.pop();for(int i=0;i<4;i++){m.x=temp.x+dir[i][0];m.y=temp.y+dir[i][1];if(m.x==(N-1)&&m.y==(M-1)){ path[m.x][m.y]=i;//记录方向 return temp.step+1+visited[m.x][m.y];}else{if(m.x>=0&&m.x<N&&m.y>=0&&m.y<M&&visited[m.x][m.y]!=-1)//可走 { if(visited[m.x][m.y]==0)//无怪 m.step=temp.step+1; else //有怪 m.step=temp.step+1+visited[m.x][m.y]; visited[m.x][m.y]=-1; path[m.x][m.y]=i;//记录方向 q.push(m); }}}}return 0; }void PATH(int x,int y)//打印路径 {int x1,y1;if(path[x][y]==-1) return;x1=x-dir[path[x][y]][0];y1=y-dir[path[x][y]][1];PATH(x1,y1);cout<<time<<"s:"<<"("<<x1<<","<<y1<<")"<<"->"<<"("<<x<<","<<y<<")"<<endl; time++; while(guai[x][y]--) { cout<<time<<"s:FIGHT AT ("<<x<<","<<y<<")"<<endl; time++;}}int main(){while(cin>>N>>M){flag=0;memset(guai,0,sizeof(guai));memset(path,-1,sizeof(path));for(int i=0;i<N;i++) for(int j=0;j<M;j++)//可以走的标记为0,有怪的标记为怪的个数,不能走的 或走过的标记为-1 { cin>>map[i][j]; if(map[i][j]=='.') visited[i][j]=0; else if(map[i][j]=='X') visited[i][j]=-1; else visited[i][j]=guai[i][j]=map[i][j]-'0'; } int sum=0; sum=bfs(); if(sum) { cout<<"It takes "<<sum<<" seconds to reach the target position, let me show you the way."<<endl; time=1; PATH(N-1,M-1); } else cout<<"God please help our poor hero."<<endl; cout<<"FINISH"<<endl; } return 0;}
1 0
- hdu 1026 Ignatius and the Princess I(迷宫)
- hdu 1026 Ignatius and the Princess I
- HDU 1026 Ignatius and the Princess I
- HDU 1026 Ignatius and the Princess I
- HDU 1026 Ignatius and the Princess I
- hdu 1026 Ignatius and the Princess I
- HDU 1026 Ignatius and the Princess I
- HDU 1026 Ignatius and the Princess I
- hdu 1026 Ignatius and the Princess I
- hdu - 1026 - Ignatius and the Princess I
- HDU-1026Ignatius and the Princess I
- HDU-1026-Ignatius and the Princess I
- hdu 1026 Ignatius and the Princess I
- hdu 1026 Ignatius and the Princess I
- hdu-1026-Ignatius and the Princess I
- hdu 1026 Ignatius and the Princess I
- hdu 1026 Ignatius and the Princess I
- HDU - 1026 Ignatius and the Princess I
- Android 知识点梳理
- nginx lua 限制流量脚步
- 高精度加法P1601
- 汇编 - 在Windows7环境下,学习汇编的工具集介绍
- VB中对EXCEL的各种操作
- hdu 1026 Ignatius and the Princess I(迷宫)
- mysql函数使用(一)
- springBoot+springSecurity验证密码MD5加密
- android类似扑克卡片翻转效果
- Android Native/Tombstone Crash Log 详细分析[原创]
- kettle-配置资源库
- C++标准库和标准模板库
- html 超链接特效
- JavaScript学习