上班之余抽点时间出来写写博文,希望对新接触的朋友有帮助。今天在这里和大家一起学习一下最小方向
本来一道简略的搜索题,输出方式是难点
#include<stdio.h> #include<string.h> #include<queue> #define inf 0x3fffffff using namespace std; int m,n,dp[510][510],dr[510][510];//记录达到该点的方向 char map[510][510]; int dir[4][2]={0,1,1,0,0,-1,-1,0}; int judge(int x,int y) { if(x>=0&&x<n&&y>=0&&y<m&&map[x][y]!='X') return 1; return 0; } struct op { int x,y,step,k; }; void bfs() { queue<op>Q; int i,k,x,y; op cur,next; cur.x=0; cur.y=0; cur.step=0; cur.k=-1; dp[0][0]=0; Q.push(cur); while(!Q.empty()) { cur=Q.front(); Q.pop(); for(i=0;i<4;i++) { x=next.x=cur.x+dir[i][0]; y=next.y=cur.y+dir[i][1]; next.step=cur.step+1; k=next.k=i; if(judge(x,y)==0)continue; if(map[x][y]>='1'&&map[x][y]<='9') next.step+=(map[x][y]-'0'); if(dp[x][y]>next.step) {Q.push(next);dp[x][y]=next.step;dr[x][y]=k;} } } } void prin(int x,int y,int t) { if(t<=0)return ;//栈溢出,找了半天试着加上这句就AC了,当初还不明确为什么?? int k=0; if(t==1) { printf("%ds:(%d,%d)->(%d,%d)\n",t,x-dir[dr[x][y]][0],y-dir[dr[x][y]][1],x,y); return ; } else { if(map[x][y]>='1'&&map[x][y]<='9') { k=map[x][y]-'0'; prin(x-dir[dr[x][y]][0],y-dir[dr[x][y]][1],t-k-1); printf("%ds:(%d,%d)->(%d,%d)\n",t-k,x-dir[dr[x][y]][0],y-dir[dr[x][y]][1],x,y); for(int j=k-1;j>=0;j--) printf("%ds:FIGHT AT (%d,%d)\n",t-j,x,y); } else { prin(x-dir[dr[x][y]][0],y-dir[dr[x][y]][1],t-1); printf("%ds:(%d,%d)->(%d,%d)\n",t,x-dir[dr[x][y]][0],y-dir[dr[x][y]][1],x,y); } } } int main() { int i,j,k; while(scanf("%d%d",&n,&m)!=-1) { memset(dr,-1,sizeof(dr)); for(i=0;i<n;i++) for(j=0;j<m;j++) dp[i][j]=inf;//达到该点的最小时间 for(i=0;i<n;i++) scanf("%s",map[i]); bfs(); if(dp[n-1][m-1]==inf) { puts("God please help our poor hero."); puts("FINISH"); } else { printf("It takes %d seconds to reach the target position, let me show you the way.\n",dp[n-1][m-1]); prin(n-1,m-1,dp[n-1][m-1]); puts("FINISH"); } } return 0; }
文章结束给大家分享下程序员的一些笑话语录: 一条狗在街上闲逛,看见橱窗里一张告示:「招聘程序员。会编程,有团队精神,至少精通两种语言。均等机会。」
那条狗就进去申请,但是被拒绝了。
「我不能雇一条狗在公司里做事。」经理说。
狗不服气,指着告示上「均等机会」几字抗议。
经理没法,叹了口气,不屑地问道:「你会编程吗?」
那条狗默默地走到电脑前,编了个程序,运作准确。
「你有团队精神吗?」经理问。
那条狗掉头看了看门外,一大群野狗在外面虎视耽耽。
「我真的不能雇狗做这份工作。」经理气急败坏地说。
「就算会编程、有团队精神,但是我需要的雇员至少要能精通两种语言。」
那条狗抬头看着经理说:「喵-噢。」
---------------------------------
原创文章 By
最小和方向
---------------------------------