狄斯奎诺算法 c语言,图的邻接表实现迪杰斯特拉算法(C语言).doc
圖的鄰接表實現迪杰斯特拉算法(C語言)
/*迪杰斯特拉算法(狄斯奎諾算法)解決的是從源點到其它所有頂點的最短路徑問題*/
//算法實現:
#include
#include
#define MAX 20
#define MAX_FLOAT_NUM 1000 /*最大浮點數(假設最大浮點數是1000)*/
typedef int infoType; /*定義邊表結點權值的數據的數據類型*/
typedef int vertexType; /*定義頂點結點上存儲的數據的數據類型*/
//定義邊表結點結構體
typedef struct edgenode {
int adjvertex; //邊表結點域
infoType info; //邊表結點權值,這里存放的是其父結點到該結點的距離
struct edgenode *next; //指向下一個鄰接點的指針域
} EdgeNode;
//定義頂點結點結構體
typedef struct vertexnode {
vertexType boolval; /* 頂點結點域,這里存放的是該結點是否找到其距源頂點最短路徑的標記,
若找到最短路徑,則該值為1,否則該值為0 */
EdgeNode *firstedge; //邊表頭指針
} VertexNode;
typedef struct {
VertexNode adjlist[MAX]; /*鄰接表*/
int vertexNum; /*頂點數*/
int edgeNum; /*邊數*/
} ALGraph; //adjacency list graph:鄰接表
/**************************************************************
函數名稱:CreateGraph
函數功能:創建鄰接表
輸入:頂點數vertexNum,邊數edgeNum
輸出:指向已創建好的鄰接表的指針
**************************************************************/
ALGraph* CreateGraph(int vertexNum, int edgeNum) {
int k;
EdgeNode *p;
//聲明圖的鄰接表
ALGraph *G;
G = (ALGraph *)malloc(sizeof(ALGraph));
if (!G) {
G = NULL;
}
else {
G->vertexNum = vertexNum;
G->edgeNum = edgeNum;
//建立頂點表
for (k = 0; k < G->vertexNum; k ++) {
G->adjlist[k].boolval = 0; /*boolval值判斷該結點到源結點的距離是否是最短距離,是1表示已達最短距離,是0表示還沒有達最短距離*/
G->adjlist[k].firstedge = NULL;
}
//建立邊表
printf("請輸入頂點、其鄰接頂點和權值信息:\n");
for(k = 0; k < G->edgeNum; k ++) {
int i, j;
infoType info;
//表現的是邊的關系,有多少對就有多少邊,所以for循環次數為G->edgeNum
scanf("%d,%d,%d",&i,&j,&info);
if (i != j) {
p = (EdgeNode *)malloc(sizeof(EdgeNode));
p->next = G->adjlist[i].firstedge;
G->adjlist[i].firstedge = p;
p->adjvertex = j;
p->info = info;
}
}
}
return G;
}
/**************************************************************
函數名稱:dijkstra(迪杰斯特拉/迪斯奎諾)
函數功能:實現迪杰斯特拉算法,找出每個頂點到源定點u的最短距離
輸入:鄰接表指針G,源頂點u,記錄每個頂點到源頂點的最短距離的數組d[],到源頂點的最短路徑上的前方頂點編號p[]
輸出:記錄每個頂點到源頂點的最短距離的數組d[],到源頂點的最短路徑上的前方頂點編號p[]
**************************************
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的狄斯奎诺算法 c语言,图的邻接表实现迪杰斯特拉算法(C语言).doc的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 百度输入法推出AI造字功能百度输入法 造
- 下一篇: c语言中freopen函数,fopen和