資源簡介
【問題描述】
試設計一個算法,求圖中一個源點到其他各頂點的最短路徑。
【基本要求】
(1)用鄰接表表示圖;
(2)按長度非遞減次序打印輸出最短路徑的長度及相應路徑。

代碼片段和文件信息
#include
#include
#include
#include
typedef?char?DataType;
#define?MaxVertices?10
#include?“AdjLGraph.h“
void?main()
{
int?inelenenkjttf;int?s[MaxVertices]t[MaxVertices];
int?RowColWei;
int?distance[MaxVertices];
int?path[MaxVertices][MaxVertices];
AdjLGraph?g;
struct?Node?*p*q;
char?v[MaxVertices];
AdjInitiate(&g);
printf(“輸入結點序列:“);
scanf(“%s“v);
len=strlen(v);
for(i=0;i InsertVertex(&giv[i]);
printf(“輸入邊數:“);
scanf(“%d“&n);
printf(“是否為有向圖?是則輸入1,否則輸入2:“);
scanf(“%d“&en);
e=en*n;
printf(“輸入邊的兩結點和權值:\n“);
for(i=0;i {
scanf(“%d%d%d“&Row&Col&Wei);
InsertEdge(&gRowColWei);
}
printf(“序號與結點:\n“);
for(i=0;i printf(“(%d):%c\t“g.a[i].sorceg.a[i].data);
printf(“\n選擇源點的序號:“);
scanf(“%d“&k);
for(i=0;i {
distance[i]=0;
}
for(i=0;i { for(j=0;j path[i][j]=-1;
}
for(i=0;i {
s[i]=0;
t[i]=0;
}
q=g.a[k].adj;
while(q!=NULL)
{
distance[q->dest]=q->weight;
path[q->dest][0]=k;
path[q->dest][1]=q->dest;
q=q->next;
}
s[k]=1;
while(!condition(slen))
{
tt=MinDis(distanceslen);
j=0;
p=g.a[tt].adj;
while(p!=NULL&&distance[tt]!=0)
{
if(distance[p->dest]>distance[tt]+p->weight||distance[p->dest]==0)
{
distance[p->dest]=distance[tt]+p->weight;
j=0;
while(path[tt][j]!=-1)
{
path[p->dest][j]=path[tt][j];
j++;
}
path[p->dest][j]=p->dest;
for(i=j+1;i path[p->dest][i]=-1;
}
p=p->next;
}
s[tt]=1;
}
t[k]=1;
while(!condition(tlen))
{
j=0;
f=MinDis(distancetlen);
t[f]=1;
printf(“\n最短距離\t%d“distance[f]);
printf(“\t“);
while(path[f][j]!=-1)
{
printf(“%c-->“g.a[path[f][j]].data);
j++;
}
printf(“\b\b\b????“);
}
printf(“\n“);
}?
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????1598??2009-04-24?04:30??AdjLGraph.h
?????文件????????2037??2009-05-09?14:28??Dijkstra1.c
- 上一篇:一款簡易的Qt登錄界面
- 下一篇:圖像識別外文文獻翻譯.doc
評論
共有 條評論