标签:des style http color os io for art
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张图,走到“.”需要1步,走到数字除了需要1步,还要停留数字上那么多步,“#”不能走,问你从左上角到右下至少走多少步,并输出路径
解题代码:简单的BFS,再加上记录前1步可以从终点往前来获得路径。
#include <iostream> #include <cstdio> #include <queue> #include <cstring> using namespace std; struct node{ int x,y,step; node(int x0=0,int y0=0,int step0=0){ x=x0;y=y0;step=step0; } }; const int offx[]={1,-1,0,0}; const int offy[]={0,0,-1,1}; int n,m,step[110][110],pre[110][110]; char a[110][110]; void solve(){ memset(step,-1,sizeof(step)); memset(pre,-1,sizeof(pre)); queue <node> q; q.push(node(0,0,0)); step[0][0]=0; while(!q.empty()){ node s=q.front(); q.pop(); for(int i=0;i<4;i++){ int dx=s.x+offx[i],dy=s.y+offy[i],newstep; if(dx<0 || dx>=n || dy<0 || dy>=m) continue; if(a[dx][dy]=='X') continue; if(a[dx][dy]=='.') newstep=s.step+1; else newstep=s.step+1+a[dx][dy]-'0'; if(newstep<step[dx][dy] || step[dx][dy]==-1){ step[dx][dy]=newstep; pre[dx][dy]=i; q.push(node(dx,dy,step[dx][dy])); } } } } void dfs(int dx,int dy){ if(pre[dx][dy]==-1) return; int sx=dx-offx[pre[dx][dy]],sy=dy-offy[pre[dx][dy]]; dfs(sx,sy); printf("%ds:(%d,%d)->(%d,%d)\n",step[sx][sy]+1,sx,sy,dx,dy); if(a[dx][dy]!='.'){ for(int i=1;i<=a[dx][dy]-'0';i++){ printf("%ds:FIGHT AT (%d,%d)\n",step[sx][sy]+1+i,dx,dy); } } } void output(){ if(step[n-1][m-1]==-1){ printf("God please help our poor hero.\n"); }else{ printf("It takes %d seconds to reach the target position, let me show you the way.\n",step[n-1][m-1]); dfs(n-1,m-1); } printf("FINISH\n"); } int main(){ while(scanf("%d%d",&n,&m)!=EOF){ for(int i=0;i<n;i++) scanf("%s",a[i]); solve(); output(); } return 0; }
HDU 1026 Ignatius and the Princess I (基本算法-BFS),布布扣,bubuko.com
HDU 1026 Ignatius and the Princess I (基本算法-BFS)
标签:des style http color os io for art
原文地址:http://blog.csdn.net/a1061747415/article/details/38276655