最少步数-深度优先搜索的实例

来源:互联网 发布:人工智能在制造业应用 编辑:程序博客网 时间:2024/06/07 01:09

http://acm.nyist.net/JudgeOnline/problem.php?pid=58#include<stdio.h>int sum1,sum;int map[9][9]={ 1,1,1,1,1,1,1,1,1, 1,0,0,1,0,0,1,0,1, 1,0,0,1,1,0,0,0,1, 1,0,1,0,1,1,0,1,1, 1,0,0,0,0,1,0,0,1, 1,1,0,1,0,1,0,0,1, 1,1,0,1,0,1,0,0,1, 1,1,0,1,0,0,0,0,1, 1,1,1,1,1,1,1,1,1,};void search(int a,int b,int c,int d,int sum)//坐标和当前步数{if(a==c&&b==d){if(sum<sum1)sum1=sum;return ;//强制性结束}map[a][b]=1;sum++;if(map[a+1][b]==0)search(a+1,b,c,d,sum);//上if(map[a-1][b]==0)search(a-1,b,c,d,sum);//下if(map[a][b-1]==0)search(a,b-1,c,d,sum);//左if(map[a][b+1]==0)search(a,b+1,c,d,sum);//右map[a][b]=0;}int main(){int i,j;int n,a,b,c,d;scanf("%d",&n);while(n--){sum1=100000;sum=0;scanf("%d%d%d%d",&a,&b,&c,&d);search(a,b,c,d,sum);printf("%d\n",sum1);}return 0;}


原题  南阳理工acm   地址:http://acm.nyist.net/JudgeOnline/problem.php?pid=58   最少步数

以下是代码:注:这个代码也是在网上看别人的思路自己写出来的...也算不上是原创...

以下是感想:

实际上第一次做这个题,感觉有点蒙,虽然说我做大多数的题第一次做都是这样。

我的问题是出现在递归的上面,在递归上面有点迷糊,主要是不知道怎么才能是最少的步数,想了几天还是算了,然后就看了网上的做法

额。。。。真简单...

具体是这样的:递归相当于把所有的结果都遍历了一遍,就是所有的路线,然后再比较路程的大小,最后直接输出。


 最重要的是递归的那一个大循环基本上看懂了就能完全理解这个题了。

最后再附上我所了解到了这个题之前我所不知道的C语言知识:1.INT_MAX (好像是c++中的,因为我去掉头文件就不能用了)表示最大的整数  其实就是宏定义,int 型同理还有INT_MIN表示整型里的最小的数

还有就是个sscanf(s,"%d",&n);//从字符串s中读入整数n    sprintf(s,"%d",n);//将n转换为字符串s  具体的可以到网上搜索一下用法  我感觉特别神奇,具体以后再说吧。



原创粉丝点击