C语言算法:深度优先探索
来源:互联网 发布:量子隧道效应 知乎 编辑:程序博客网 时间:2024/04/29 15:23
我们可以定义一个二维数组来保存这个表格:
int a[5][5] = {
{ 0, 2, -1,-1, 10 },
{ -1, 0, 3,-1, 7 },
{ 4, -1, 0, 4, -1 },
{ -1, -1, -1, 0, 5 },
{ -1, -1, 3, -1, 0 }
};
{
{ -1,
{
{ -1, -1, -1,
{ -1, -1,
};
我们还需要定义一个标记数组来标记这个城市是否已走过:
int sign[5] = { 0 };
定义一个全局变量来保存最小距离:
int min = 999999;
核心代码为一个递归函数,全部代码如下:
#include
int a[5][5] = {
{ 0, 2, -1,-1, 10 },
{ -1, 0, 3,-1, 7 },
{ 4, -1, 0, 4, -1 },
{ -1, -1, -1, 0, 5 },
{ -1, -1, 3, -1, 0 }
};
int sign[5] = { 0 };
{
{ -1,
{
{ -1, -1, -1,
{ -1, -1,
};
int sign[5] = { 0 };
int min = 999999;
void find_( int x, int count )
{
//判断是否已经到达5城市
if( x == 4 )
{
if( count < min )
{
min =count;//更新min值
return;
}
}
int i = 0;
//寻找所有的可能性,并且尝试所有的可能性并移动到可以移动的城市
for( i = 0; i < 5; i++ )
{
//这个城市与上个城市之间连通且之前并没有走过,就移动到这个城市
if( a[x][i] > 0 &&sign[i] == 0 )
{
sign[i] =1;//标记这个城市已走过
count +=a[x][i];
find_( i,count );//移动到下个城市,寻找目标
sign[i] =0;//返回后取消标记,防止其他路径出现错误
count -=a[x][i];//这一步很重要,要将count的值还原
}
}
{
}
int main()
{
sign[0] = 1;
find_( 0, 0 );
printf("min = %d", min );
getchar();
getchar();
return 0;
}
{
}
运行结果为:
除了用深度优先探索这个方法,我们还可以用广度优先探索,在这里我先大家推荐一本书《啊哈!算法》,这是一本很棒的书,推荐大家去看。
0 0
- C语言算法:深度优先探索
- 深度优先遍历与广度优先遍历算法的C语言实现
- 深度优先搜索算法(java语言)
- C语言学习之深度优先搜索
- 深度、广度优先遍历算法C实现
- 深度、广度优先遍历算法C实现
- 短进程优先算法C语言实现
- C语言模拟最高优先数优先进程调度算法
- 深度探索C语言函数可变长参数
- 深度探索C语言函数可变长参数
- 深度探索C语言函数可变长参数
- 深度优先搜索算法
- 深度优先搜索算法
- 深度优先算法
- 深度优先搜索算法
- 深度优先搜索算法
- 深度优先搜索算法
- dfs深度优先算法
- CSS魔法堂:你一定误解过的Normal flow
- django多数据库联用
- 解析异步消息处理机制
- 学计算机语言最需要思考啊
- 欢迎使用CSDN-markdown编辑器
- C语言算法:深度优先探索
- Android四大组件之Broadcast
- c++实验5——项目1:数组分离
- 论技术修炼
- c++第五次上机实验
- swift设置返回按钮图标
- Ubuntu 16.04 LTS安装好需要设置的15件事(喜欢新版本)
- 《java入门第一季》之面向对象(代码块一网打尽)
- dnf - How to install specific Kernel version