ZZULI_SummerPractice(3)nbsp;POJnbsp;3984…

2023-10-20 03:58

本文主要是介绍ZZULI_SummerPractice(3)nbsp;POJnbsp;3984…,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

C - 迷宫问题 p
Time Limit: 1000MS
Memory Limit: 65536K
64bit IO Format: %I64d & %I64u

[Submit]   [Go Back]   [Status]

Description

定义一个二维数组:

int maze[5][5] = {
0, 1, 0, 0, 0,
0, 1, 0, 1, 0,
0, 0, 0, 0, 0,
0, 1, 1, 1, 0,
0, 0, 0, 1, 0,
};

它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。

Input

一个5 × 5的二维数组,表示一个迷宫。数据保证有唯一解。

Output

左上角到右下角的最短路径,格式如样例所示。

Sample Input

0 1 0 0 0
0 1 0 1 0
0 0 0 0 0
0 1 1 1 0
0 0 0 1 0

Sample Output

(0, 0)

(1, 0)
(2, 0)
(2, 1)
(2, 2)
(2, 3)
(2, 4)
(3, 4)
(4, 4)
这题要是求最短距离的话估计都能做出来,但是一加上路径的话就不好做了(幸亏我事先早有准备ZZULI_SummerPractice(3) <wbr>POJ <wbr>3984 <wbr> <wbr>C <wbr>- <wbr>迷宫问题),用一个数组一旦有数据存入队列,则在数组中记下他的前驱,这样,最后倒序查找就能找到啦,然后输出就可以啦!
代码:
#include<stdio.h>
#include<string.h>
typedef struct point{
   int x,y,step;
}target;
int map[5][5],flag[4][2]={0,1,0,-1,-1,0,1,0};
target que[30],dir[5][5];
int BFS(target start)
{
   int end,top,i;
   target in,next;
   end=top=0;
   que[top]=start;
   while(top>=end)
   {
       in=que[end];
       end=(end+1)0;
       for(i=0;i<4;i++)
       {
           next.x=in.x+flag[i][0];
           next.y=in.y+flag[i][1];
           if(next.x==4&&next.y==4&&map[next.x][next.y]==0)
           {
               dir[next.x][next.y].x=in.x;
               dir[next.x][next.y].y=in.y;
               return in.step+1;
           }
           if(next.x>=0&&next.x<5&&next.y>=0&&next.y<5&&map[next.x][next.y]==0)
           {
               dir[next.x][next.y].x=in.x;
               dir[next.x][next.y].y=in.y;
               map[next.x][next.y]=1;
               top=(top+1)0;
               next.step=in.step+1;
               que[top]=next;
           }
       }
   }
   return -1;
}
int main()
{
   int i,j,k,num,m,n;
   target start;
   for(i=0;i<5;i++)
       for(j=0;j<5;j++)
           scanf("%d",&map[i][j]);
   start.x=start.y=start.step=0;
   map[0][0]=1;
   num=BFS(start);
   que[0].x=4;que[0].y=4;
   k=1;i=j=4;
   while(i!=0||j!=0)
   {
       m=i;n=j;
       i=dir[m][n].x;
       j=dir[m][n].y;
       que[k].x=i;que[k++].y=j;
   }
   for(i=k-1;i>=0;i--)
       printf("(%d, %d)\n",que[i].x,que[i].y);
   return 0;
}

这篇关于ZZULI_SummerPractice(3)nbsp;POJnbsp;3984…的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/244486

相关文章

Ubuntunbsp;出现apt-get:nbsp;Packag…

学习了 原文地址:Ubuntu 出现apt-get: Package has no installation candidate问题 作者:zhou4539   Ubuntu 出现apt-get: Package has no installation candidate问题 分类: 系统-Linux 2011-12-18 13:32 751人阅读 评论(0) 收藏 举报 今天在

微信公众平台nbsp;10.29日更新nbsp;之己见

曾经有前辈说过,无论微信 5.0 的部分功能做的有多差,但是这是微信转型的一个里程碑。起初,笔者有点不太理解其中的道理,但是随着自己做了些东西东西后,才慢慢发现,这种先推广后优化,让用户去引导功能开发的策略是多么的明智。 此前,网络曾有谣言,微信服务号将于明年起收3000元/年的年费,这一传言尚未被证实,昨天微信公众平台正式推出了微信认证这一个功能,服务号可以花费300元进行认

C语言的条件编译#if,nbsp;#elif…

原文地址:C语言的条件编译#if, #elif, #else, #endif、#ifdef, #ifndef 作者:Embeder 有些程序在调试、兼容性、平台移植等情况下可能想要通过简单地设置一些参数就生成一个不同的软件,这当然可以通过变量设置,把所有可能用到的代码都写进去,在初始化时配置,但在不同的情况下可能只用到一部分代码,就没必要把所有的代码都写进去,就可以用条件编译,通过预编译指

结构体定义nbsp;typedefnbsp;structnbsp;…

很不错 原文地址:结构体定义 typedef struct 用法详解和用法小结 作者:紫心玲儿 typedef是类型定义的意思。typedef struct 是为了使用这个结构体方便。 具体区别在于: 若struct node {}这样来定义结构体的话。在申请node 的变量时,需要这样写,struct node n; 若用typedef,可以这样写,typedef struct node

C++nbsp;usingnbsp;namespacenbsp;stdnbsp;详解

一 : 和是不一样,前者没有后缀,实际上,在你的编译器include文件夹里面可以看到,二者是两个文件,打开文件就会发现,里面的代码是不一样的。  后缀为.h的头文件c++标准已经明确提出不支持了,早些的实现将标准库功能定义在全局空间里,声明在带.h后缀的头文件里,c++标准为了和C区别开,也为了正确使用命名空间,规定头文件不使用后缀.h。  因此,当使用时,相当于在c中调用库函数,使用

C++的dllexport和dllimportnbsp;nbsp;…

C++的dllexport和dllimport: __declspec(dllexport) 声明一个导出函数,是说这个函数要从本DLL导出。我要给别人用。一般用于dll中省掉在DEF文件中手工定义导出哪些函数的一个方法。当然,如果你的DLL里全是C++的类的话,你无法在DEF里指定导出的函数,只能用__declspec(dllexport)导出类 __declspec(dllimport)

#ifndefnbsp;PRINT_Hnbsp;nbsp;…

例一: print.h: 文件内容 #ifndef PRINT_H #define PRINT_H #ifdef __cplusplus extern " C " { #endif  //打印点东西 void Print(int iNum);  #ifdef __cplusplus }#endif  #endif 作用:为了防止头文件被重复包含: 如头文件a.h中包含函数f

templatenbsp;lt;nbsp;typenameamp;nb…

template < typename var_name >:定义一个模板函数 var_name表示一个类型;在模版实例化时可以替换任意类型,不仅包括内置类型(int等),也包括自定义类型class。 比如你想求2个int  float  或double型变量的值,只需要定义这么一个函数就可以了,假如不用模板的话,你就必须针对每种类型都定义一个sum函数.. int sum(int, int);

OpenGL-ESnbsp;中的nbsp;mipmappingnbsp;…

原文地址:OpenGL-ES 中的 mipmapping 算法 作者:雁子     最近刚把mipmapping在ES中实现完成,在这里想总结一下算法,并讨论一下相关的结果。     Mipmap在3D图形学中主要是用来做anti-aliasing,这跟图像学中的概念是一致的:图像在缩小时因为采样率不够,就会导致混叠现象,如果是线,就表现为断线,如果是纹理比较复杂,就表现为纹理变得杂乱。

Cygwinnbsp;amp;nbsp;Gitnbsp;中文支持

原文地址:Cygwin & Git 中文支持 作者:CICO李依洁 1.在下面的文件末尾添加一行。 C:cygwinhomecico.bash_profile export LESSCHARSET=latin1 ps:控制源代码(例如java文件)在Cygwin界面输出时,不做特殊处理(不要用UTF-8的规则将字节拼成字,utf-8用三个字节解释汉字,GBK用两个字节)。 2.打