标签:bre ... 构造 follow min position tle sum details
5 6 .XX.1. ..X.2. 2...X. ...XX. XXXXX. 5 6 .XX.1. ..X.2. 2...X. ...XX. XXXXX1 5 6 .XX... ..XX1. 2...X. ...XX. XXXXX.
It takes 13 seconds to reach the target position, let me show you the way. 1s:(0,0)->(1,0) 2s:(1,0)->(1,1) 3s:(1,1)->(2,1) 4s:(2,1)->(2,2) 5s:(2,2)->(2,3) 6s:(2,3)->(1,3) 7s:(1,3)->(1,4) 8s:FIGHT AT (1,4) 9s:FIGHT AT (1,4) 10s:(1,4)->(1,5) 11s:(1,5)->(2,5) 12s:(2,5)->(3,5) 13s:(3,5)->(4,5) FINISH It takes 14 seconds to reach the target position, let me show you the way. 1s:(0,0)->(1,0) 2s:(1,0)->(1,1) 3s:(1,1)->(2,1) 4s:(2,1)->(2,2) 5s:(2,2)->(2,3) 6s:(2,3)->(1,3) 7s:(1,3)->(1,4) 8s:FIGHT AT (1,4) 9s:FIGHT AT (1,4) 10s:(1,4)->(1,5) 11s:(1,5)->(2,5) 12s:(2,5)->(3,5) 13s:(3,5)->(4,5) 14s:FIGHT AT (4,5) FINISH God please help our poor hero. FINISH
1.abduct:绑架,诱拐。使外展
2.假设结构体中有构造函数,用该结构体类型去定义变量时,必须用构造函数去初始化变量,否则编译通只是
3.代码:
#include<cstdio> #include<cstring> #include<queue> #include<stack> using namespace std; struct node { int x,y,t; node(int a,int b,int c):x(a),y(b),t(c) {}//构造函数 void Set(int a,int b,int c)//设置函数 { x=a; y=b; t=c; } bool operator <(const node &a)const//让优先队列的优先级:t小的,优先级高 { return a.t<t; } }; struct node1 { int x,y; }; int n,m; char mat[105][105]; bool vis[105][105]; node1 matt[105][105];//记录父亲坐标 int dir[4][2]= {1,0,0,1,-1,0,0,-1}; bool flag; void bfs() { memset(vis,0,sizeof(vis)); priority_queue<node> Q; node first=node(0,0,0); Q.push(first); vis[first.x][first.y]=1; matt[0][0].x=0; matt[0][0].y=0; while(!Q.empty()) { first=Q.top(); Q.pop(); if(first.x==n-1&&first.y==m-1) { flag=1; printf("It takes %d seconds to reach the target position, let me show you the way.\n",first.t); stack<node1> S;//把路径存储在栈里 node1 e; e.x=n-1; e.y=m-1; S.push(e); while(1) { e=S.top(); if(e.x==matt[e.x][e.y].x&&e.y==matt[e.x][e.y].y) { break; } node1 ee; ee.x=matt[e.x][e.y].x; ee.y=matt[e.x][e.y].y; S.push(ee); } for(int i=1; i<=first.t; i++)//输出路径 { printf("%ds:",i); if(mat[S.top().x][S.top().y]!=‘.‘) { printf("FIGHT AT (%d,%d)\n",S.top().x,S.top().y); mat[S.top().x][S.top().y]--; if(mat[S.top().x][S.top().y]==‘0‘) { mat[S.top().x][S.top().y]=‘.‘; } } else { printf("(%d,%d)",S.top().x,S.top().y); S.pop(); printf("->(%d,%d)\n",S.top().x,S.top().y); } } printf("FINISH\n"); break; } node next=node(0,0,0); for(int i=0; i<4; i++) { int tx=first.x+dir[i][0]; int ty=first.y+dir[i][1]; if(tx>=n||tx<0||ty>=m||ty<0||vis[tx][ty]==1) { continue; } else if(mat[tx][ty]==‘X‘) { continue; } else if(mat[tx][ty]==‘.‘) { next.Set(tx,ty,first.t+1); matt[tx][ty].x=first.x; matt[tx][ty].y=first.y; vis[tx][ty]=1; Q.push(next); } else { next.Set(tx,ty,first.t+1+mat[tx][ty]-‘0‘); vis[tx][ty]=1; matt[tx][ty].x=first.x; matt[tx][ty].y=first.y; Q.push(next); } } } if(!flag) printf("God please help our poor hero.\nFINISH\n"); } int main() { while(scanf("%d%d",&n,&m)==2) { for(int i=0; i<n; i++) { scanf("%s",mat[i]); } flag=0; bfs(); } return 0; }
HDU 1026 Ignatius and the Princess I(BFS+记录路径)
标签:bre ... 构造 follow min position tle sum details
原文地址:http://www.cnblogs.com/cynchanpin/p/7000820.html