广搜算法c语言例题,求C语言深搜,广搜,dijkstra,动态规划的教程

#include

#include

#define infinity 1000000000             //最大距离

#define max_nodes 1024                  //最大节点数

int n,dist[max_nodes][max_nodes];       //dist[i][j]表示从 i 到 j 的距离

void shortest_path(int s, int t, int path[])

{

struct state

{

int predecessor; //前驱节点

int length;       //到起始点的距离

enum {permanent, tentative} label;

}state[max_nodes];

int i,k,min;

struct state * p;

for(p=&state[0]; p

{

p->predecessor = -1;

p->length = infinity;

p->label = tentative;

}

state[t].length = 0;

state[t].label = permanent;

k = t;        //k 是当前工作节点

do

{

for(i=0; i

{

if(dist[k][i]!=0 && state[i].label==tentative)

{

if(state[k].length+dist[k][i]

{

state[i].length = state[k].length+dist[k][i];

state[i].predecessor = k;

}

}

}

k=0;

min=infinity;

for(i=0; i

{

if(state[i].label==tentative && state[i].length

{

k=i;

min=state[i].length;

}

}

state[k].label = permanent;

}while(k!=s);

i=0;

k=s;

do

{

path[i++] = k;

k = state[k].predecessor;

}while(k>=0);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值