数据结构图:用深度优先搜素,找具体两个顶点的最短路径

图:最短路径
用深度优先搜素,找具体两个顶点的最短路径
void min_path_dfs(Graph *pg,int cur,int end,int curpath,int mark[],int *pminpath,int path[],int cnt,int savepath[],int *savecnt){
if(curpath>*pminpath){//还没到终点,已经走过的路大于当前最小路径
return;
}
if(curend){//到达目标路径
if(curpath<*pminpath){
*pminpath=curpath;
int i;
for(i=0;i<cnt;i++){
savepath[i]=path[i];
}
savepath[i]=cur;
*savecnt=cnt+1;
}
return;
}
mark[cur]=1;//顶点已走过
path[cnt++]=cur;//记录下当前点下标
ENode *node=pg->veryex[cur].enodes;
while(node!=NULL){
int pos=get_position(pg,node->date);
if(mark[pos]0){
min_path_dfs(pg,pos,end,curpath+node->weight,mark,&pminpath,path,cnt,savepath,&savecnt);
}
node=node->next;
}
mark[cur]=0;//路径不正确,原本的顶点复原为0,表示可以重新走
}
int short_path_dfs(Greaph *pg,char skey,char ekey){
//得到两个顶点的下标位置
int spos=get_position(pg,skey);
int epos=get_position(pg,ekey);
if(spos
-1||epos
-1){//所给的顶点不存在
return -1;
}
int vn=pg->vertexnum;//图中顶点的个数
int mark[vn];//记录顶点是否走过
int minpath=MAX;//(1<<31)
int i;
for(i=0;i<vn;i++){
mark[i]=0;//表示顶点没有走过
}
int path[vn];//记录走过的顶点下标位置
int cnt=0;
int savepath[vn];
int savecnt=0;
min_path_dfs(pg,spos,epos,0,mark,&minpath,path,cnt,savepath,&savecnt);
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值