與鄰接矩陣表示的方法不同的是,在更新dis陣列和path陣列時,只需要把求u到j距離的g.edges[u][j]換成鄰接表表示
g.edges[u][j]表示u到j的距離,因此可以寫乙個getweight(g, u, j)演算法用於計算u到j的距離
//獲得邊的權重
//建立圖
void
creategraph
(agraph *g)
fclose
(fp);}
//獲得邊的權重
float
getweight
(agraph *g,
int u,
int j)
return inf;
}//迪傑斯特拉演算法
void
dijkstra
(agraph *g,
int dist,
int path,
int v)
arcnode *p = g->adjlist[v]
.firstarc;
while
(p !=
null
) path[v]=-
1;set[v]=1
; dist[v]=0
;for
(i =
0;i < g->numnodes -
1;i++)}
set[u]=1
;for
(j=0
;j < g->numnodes;j++)}
}}//輸出路徑
void
print_path
(int path,
int v1)
}int
main()
spfa和迪傑斯特拉(鄰接表)
這個算spfa模板吧.本來想用來解til the cows come home poj 2387 但是。有重邊.所以。用鄰接表的話.重邊問題我暫時不知道怎麼解決.只能用鄰接矩陣做了.然後 這個就用作spfa模板吧 感覺。如果用佇列的話,迪傑斯特拉和spfa之間應該就是vis用處不同了.畢竟,spfa...
迪傑斯特拉演算法
if object id t test is not null drop table t test gocreate table dbo t test id int identity 1,1 not null primary key,自增字段,無意義 header varchar 500 第一點的名...
迪傑斯特拉演算法
dijkstra 迪傑斯特拉 演算法是典型的最短路徑路由演算法,用於計算乙個節點到其他所有節點的最短路徑。主要特點是以起始點為中心向外層層擴充套件,直到擴充套件到終點為止。dijkstra演算法 能得出最短路徑的最優解,但由於它遍歷計算的節點很多,所以效率低。dijkstra演算法是很有代表性的最短...