标题:Dijkstra最短路径问题
只看楼主
zorrozzz
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2006-10-22
 问题点数:0 回复次数:0 
Dijkstra最短路径问题

做了几个晚上,只能做到这样了,现在感觉学数据结构真的痛苦
希望各位高手指点一下
最好能提供源代码(vc下的)
//最短路径
//建立一个图
#include "iostream.h"
#include "stdio.h"
#define max 100
typedef struct
{
int data;
int visited;
}node;
typedef struct
{
node vex[max];
int cost[max][max];
int e;
int v;
}graph;
creategraph(graph &g)
{ int i,j;
int v1,v2;

cout<<"enter the num of v:"<<endl;
cin>>g.v;
cout<<"enter the num of e:"<<endl;
cin>>g.e;
cout<<"enter the value of vex:"<<endl;
for(i=0;i<g.v;i++)
{
cin>>g.vex[i].data;
}
for(i=0;i<g.v;i++){
g.vex[i].visited=0;
for(j=0;j<g.v;j++)
g.cost[i][j]=0;
}
cout<<"enter the edge:"<<endl;
for(int k=0;k<g.e;k++)
{
cout<<"enter the head:"<<endl;
cin>>v1;
cout<<"enter the rear:"<<endl;
cin>>v2;
cout<<"enter the value of cost:"<<endl;
for(i=0;v1!=g.vex[i].data;i++);
for(j=0;v2!=g.vex[j].data;j++);
cin>>g.cost[i][j];
}
}
printx(graph &g)
{
for(int i=0;i<g.v;i++){
for(int j=0;j<g.v;j++)
cout<<g.cost[i][j]<<" ";
cout<<endl;}
}
//最短路径
void z(graph &g)
{
int d[max];
int dad[max];
int i,j,u;
int min,dis;
for(int q=0;q<g.v;q++)
{
d[q]=g.cost[0][q];
cout<<d[q]<<endl;//
}
g.vex[0].visited=1;
d[0]=0;

for(i=1;i<g.v;i++)
{

min=1000;
for(j=1;j<g.v;j++)
{
if(g.vex[j].visited==0 &&d[j]<min)
{
u=j;
min=d[j];

}
g.vex[u].visited=1;
}
//修改权值
for(j=1;j<g.v;j++)
{
if(g.vex[j].visited==0)
{
dis=d[u]+g.cost[u][j];
d[j]=(d[j]<dis)?d[j]:dis;

cout<<d[j];
}
}

}

cout<<d[3];//

}

main()
{
graph g;
creategraph(g);
printx(g);
z(g);

}

搜索更多相关主题的帖子: Dijkstra 路径 
2006-11-28 12:44



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-105864-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.041709 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved