关于最短路径的算法问题

wanbin2131 2007-04-24 03:33:55
// 数据算法中的最短路径算法.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "iostream.h"
const int n= 6; // 图中顶点数
const int e=8 ; // 图中边数
const int max=9999;

struct graph
{

int V[n+1] ; // 存放顶点信息v1,v2,….vn,不使用v[0]存储空间
int arcs[n+1][n+1] ; // 邻接矩阵

};


struct record{ //每个顶点的数据结构设置为一个数组队列

int number; //顶点号

int flag; //标志是否从队列中被选过如果为1表示选过为0表示未选

int allpath; //从源点到这个点的当前最短距离(权最小)
int v_p; //表示顶点n的前一个顶点,比如path[i].v_p表示最短路径中顶点i的前一个顶点,
//0表示前面没有前一个顶点


}path[n+1];



void creatadj(graph &g)
{ int i, j,k ,distance;

int min=9999;
cout<<"请输入顶点序号"<<endl;
for (k=1; k<=n; k++)
cin>>g.V[k];//输入顶点信息
for (i=1; i<=n; i++ )
for (j=1; j<=n; j++)
g.arcs[i][j]=max;
cout<<"请输入边及其边上的权,输入格式为(边的一个端点i 另一个端点j 边上的权distance)"<<endl;
for (k=1; k<=e; k++)
{
cin>>i>>j>>distance; //输入一条边(i,j)
g.arcs[i][j]=distance;
g.arcs[j][i]=distance;
}
}


void dijkstara(graph &g)
{ int i,m,j,mint=0,minnumber;
int min=9999;

int k,s,t;//源点的上一个点为k,源点为s,需要加入的点为t


cout<<"请输入源点s"<<endl;
cin>>s;
for(i=1;i<=n;i++)
{if(i==s)
{ path[i].flag=1;
path[i].allpath=0;
path[i].v_p=0;}

else

{path[i].allpath=max;

path[i].flag=0;

path[i].number=i;
path[i].v_p=0;}

}//end for end if




for(i=1;i<=n;i++)
{for(m=1;m<=n;m++)
if(path[m].allpath<min&&path[m].flag==0)//选出一个具有最值的点
min=path[m].allpath;

minnumber=path[m].number;
path[i-1].v_p=minnumber;
path[minnumber].flag=1;
for(i=1;i<=n;i++)//进行类似广度优先搜索,更新最短路径

{if((i!=minnumber) &&path[i].flag!=1)

path[i].allpath=path[minnumber].allpath+g.arcs[minnumber][i];

}//end if and end for


}//end for








cout<<"最短路径长度(权)为"<<endl;

for(j=1;j<=n;j++)



cout<<path[j].allpath<<" "<<path[i].v_p<<endl;






}


int main(int argc, char* argv[])
{
struct graph g={{0,1,2,3,4,5,6},{
{max,max,max,max,max,max,max},
{max,0,2,max,max,max,5},
{max,2,0,6,max,max,9},
{max,max,6,0,8,10,4},
{max,max,max,8,max,max,max},
{max,max,max,10,max,0,7},
{max,5,9,4,max,7,0}}};
// creatadj(g);

dijkstara(g);
return 0;
}



我看书上最短路径的算法DIJKSTRA,自己写了下程序,
其他函数好象没什么问题,估计问题应该在void dijkstara(graph &g)中
但我感觉就是安算法写出来的,就是运行不正确
主函数中的赋值是为了方便调程序写的,程序正确了就用creatadj(g);,这个函数没问题,都能通过,要能帮我改下void dijkstara(graph &g)的吗?
谢谢了
...全文
263 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
wanbin2131 2007-04-24
  • 打赏
  • 举报
回复
没人解决,自己顶下
wanbin2131 2007-04-24
  • 打赏
  • 举报
回复
其他的可以不用看,只看前面的声明和void dijkstara(graph &g)就行了,主要是void dijkstara(graph &g)有错误的
celftj 2007-04-24
  • 打赏
  • 举报
回复
太长,帮顶

65,208

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧