首页 > 代码库 > HDU 1026 Ignatius and the Princess I (BFS)
HDU 1026 Ignatius and the Princess I (BFS)
题目链接
题意 : 从(0,0)点走到(N-1,M-1)点,问最少时间。
思路 : BFS、、、、、
1 #include <stdio.h> 2 #include <string.h> 3 #include <queue> 4 #include <iostream> 5 6 using namespace std ; 7 8 struct node 9 {10 int x,y ;11 int tim ;12 friend bool operator < (node a,node b)13 {14 return a.tim > b.tim ;15 }16 } temp,temp1;17 int N,M ,t;18 char mapp[110][110] ;19 int vis[110][110] ;20 int dir[4][2] = {{-1,0},{1,0},{0,-1},{0,1}} ;21 22 int BFS()23 {24 temp.x = 0 ;25 temp.y = 0 ;26 temp.tim = 0 ;27 priority_queue<node>Q ;28 Q.push(temp) ;29 // vis[0][0] = true ;30 while(Q.size())31 {32 temp = Q.top() ;33 Q.pop() ;34 if(temp.x == N-1 && temp.y == M-1) return temp.tim ;35 for(int i = 0 ; i < 4 ; i++)36 {37 temp1.x = temp.x+dir[i][0] ;38 temp1.y = temp.y+dir[i][1] ;39 if(temp1.x >= 0 && temp1.y >= 0 && temp1.x <= N-1 && temp1.y <= M-1 && vis[temp1.x][temp1.y] == -1 && mapp[temp1.x][temp1.y] != ‘X‘)40 {41 vis[temp1.x][temp1.y] = temp.x*M+temp.y ;42 if(mapp[temp1.x][temp1.y] == ‘.‘)43 temp1.tim = temp.tim+1 ;44 else45 temp1.tim = temp.tim + mapp[temp1.x][temp1.y]-‘0‘+1 ;46 Q.push(temp1) ;47 }48 }49 }50 return -1 ;51 }52 void print(int x,int y)53 {54 if(x == 0 && y == 0)55 return ;56 int xx = vis[x][y]/M ;57 int yy = vis[x][y]%M ;58 print(xx,yy) ;59 printf("%ds:(%d,%d)->(%d,%d)\n",t++,xx,yy,x,y) ;60 if(mapp[x][y] >= ‘0‘ && mapp[x][y] <= ‘9‘)61 {62 while(mapp[x][y] -‘0‘ > 0)63 {64 printf("%ds:FIGHT AT (%d,%d)\n",t++,x,y) ;65 mapp[x][y] -- ;66 }67 }68 }69 int main()70 {71 while(~scanf("%d %d",&N,&M))72 {73 for(int i = 0 ; i < N ; i++ )74 scanf("%s",mapp[i]) ;75 memset(vis,-1,sizeof(vis)) ;76 int timee = BFS() ;77 if(timee == -1)78 {79 printf("God please help our poor hero.\nFINISH\n") ;80 }81 else82 {83 t = 1 ;84 printf("It takes %d seconds to reach the target position, let me show you the way.\n",timee) ;85 print(N-1,M-1) ;86 printf("FINISH\n") ;87 }88 }89 return 0 ;90 }
HDU 1026 Ignatius and the Princess I (BFS)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。