c語言實現迪傑斯特拉演算法(鄰接表)

2021-10-01 17:35:32 字數 1063 閱讀 8369

儲存結構,結構體的定義:(權值w用於表示兩點間路徑的花費)

typedef

int status;

typedef

struct enode//圖的鄰接表定義

enode;

typedef

struct lgraph

lgraph;

迪傑斯特拉演算法:

int

choose

(int

*d,int

*s,int n)

//每次選擇乙個為加入陣列s【】的具有最小權值的結點

}return minpos;

} status dijkstra

(int v,

int*d,

int*path,lgraph *lg)

//迪傑斯特拉演算法求路徑

s=(int*)

malloc

(sizeof

(int

)*lg-

>n)

;for

(i=0

;i>n ;i++

)while

(p)//初始化

p=p-

>nextarc ;

}//對各個陣列初始化

s[v]=1

; d[v]=0

;for

(i=1

;i>n ;i++

)//判斷是否選擇了有效結點

s[k]=1

; p=lg-

>a[k];if

(p==

null

)while

(p) p=p-

>nextarc ;}}

return ok;

}void

fun(lgraph *lg)

//此函式用於輸出路徑

while

(path[v]!=-

1)printf

("%d\n"

,u);

}

C語言實現 迪傑斯特拉演算法

我今天看了一天的這個演算法,硬是沒有搞明白,好吧,推薦大家看看土豆上邊的乙個叫 正月點燈籠 的人,講的很好。include define inf 0x7fffffff define maxn 50 int matrix maxn maxn void dijkstra int out,int n,in...

迪傑斯特拉演算法(鄰接表求解)

與鄰接矩陣表示的方法不同的是,在更新dis陣列和path陣列時,只需要把求u到j距離的g.edges u j 換成鄰接表表示 g.edges u j 表示u到j的距離,因此可以寫乙個getweight g,u,j 演算法用於計算u到j的距離 獲得邊的權重 建立圖 void creategraph a...

迪傑斯特拉演算法 C語言

include include define infin 65535 define max vertex num 20 int final 6 typedef enum graphkind 有向圖,有向網,無向圖,無向網 typedef struct arccell arccell,adjmatri...