儲存結構,結構體的定義:(權值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...