zoukankan      html  css  js  c++  java
  • 最小方向hdu 1026

    上班之余抽点时间出来写写博文,希望对新接触的朋友有帮助。今天在这里和大家一起学习一下最小方向

        本来一道简略的搜索题,输出方式是难点

        

        

        

        

        

        

        每日一道理
    在每个人心中,都曾停留过那些值得怀念的人,也许还在,也许早已消逝,在茫茫人海中丢失,于是,那份怀念便得凄凉,因为模糊的记忆中只剩下一个“空壳”,没有什么,甚至连自己的心都装不下,时间把一切抹平,也把当日的泪水封锁,因为已经没有,怀念只是悲凉!
    #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
    最小和方向
    ---------------------------------

  • 相关阅读:
    数组
    JavaScript语法
    Math.random()
    第二第三周暑期集训总结
    第一周
    ACM课程学习总结
    专题四---总结
    专题四--1004
    专题四--1005
    专题四--1006
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3105052.html
Copyright © 2011-2022 走看看