放飞梦想

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
代码
#include <stdio.h>
#include
<conio.h>
#include
<stdlib.h>

#define X 10000
#define VertexNum 7 //实际上共有六个顶点(1---6)
#define EdgeNum 9

int Graph[VertexNum][VertexNum] =
//0 1 2 3 4 5 6
{ X, X, X, X, X, X, X, //0
X, X, 6, 3, X, X, X, //1
X, X, X, X, 5, X, X, //2
X, X, 2, X, 3, 4, X, //3
X, X, X, X, X, X, 3, //4
X, X, X, X, 2, X, 5, //5
X, X, X, X, X, X, X //6
};

int Visited[VertexNum];
int path[VertexNum];
int Distance[VertexNum];

void Dijkstra(int Begin)
{
int MinEdge, Vertex, i,j, Edges;
Edges
= 1;
Visited[Begin]
= 1;
for (i = 1; i<VertexNum; i++) Distance[i] = Graph[Begin][i];

Distance[Begin]
= 0;
printf(
" 1 2 3 4 5 6\\n");
printf(
"-----------------------------------\\n");
printf(
"s:%d", Edges);
for( i=1; i<VertexNum; i++)
if (Distance[i] == X) printf(" *"); else printf("%3d",Distance[i]);
printf(
"\\n");
while( Edges<VertexNum-1)
{
Edges
++; MinEdge = X;
for(j=1; j<VertexNum; j++)
if (Visited[j]==0 && MinEdge > Distance[j] )
{
Vertex
= j; MinEdge = Distance[j];
}
Visited[Vertex]
= 1;
printf(
"s:%d",Edges);
for(j=1; j<VertexNum; j++)
{
if (Visited[j] == 0 && Distance[Vertex] + Graph[Vertex][j] <Distance[j])
{ Distance[j]
= Distance[Vertex] + Graph[Vertex][j];
path[j]
= Vertex;
}
//printf("%6d",Distance[j]);
if (Distance[j] == X) printf(" *"); else printf("%3d",Distance[j]);
}
printf(
"\\n");
}
}

void main()
{

int i;
int k;
// clrscr();
for(i=0; i<VertexNum; i++) { Visited[i] = 0; path[i] = 1;}
Dijkstra(
1);
printf(
"\\n\\nAll Path-------------------------\\n");


for(i=2; i<VertexNum; i++) //printf("%5d",Visited[i]);
{
printf(
"[%d] ",Distance[i]);
k
= i;
do
{
printf(
"%d<--",k);
k
= path[k];
}
while (k!=1);
printf(
"1 \\n");
}
}

 

posted on 2010-06-25 14:37  rockysy  阅读(313)  评论(0)    收藏  举报