做了几个晚上,只能做到这样了,现在感觉学数据结构真的痛苦
希望各位高手指点一下
最好能提供源代码(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);
}