Dijkstra 鄰接表的實現

2021-09-22 12:53:01 字數 1616 閱讀 8664

題目:編寫程式,實現以鄰接表做儲存結構,實現求源點到其餘各頂點的最短距離

pnode li[100];//頭節點

int sign[100];//標記是否用過,用於輸出距離為無窮大的點

int star;//起點

void addnode(pnode *li,int v1,int v2,int w) //當li[v1]後沒有元素時

else if(li[v1]->next==null)

else

}//當li[v1]後只有乙個元素時

else

else

} //普遍情況,找到合適的點插入結點

}//此處分了三種情況加入點

void creatlist(pnode *li,int n,int m)//對頭節點進行初始化

cin>>v1>>v2>>w;

addnode(li,v1,v2,w);

star=v1;

sign[star]=1;

for(int i=0;i>v1>>v2>>w;

addnode(li,v1,v2,w);

}//完成鄰接表的建立,0不用

} void dijkstra(pnode *li,int x,int n,int m)//每次找到最短距離min結點

int dis=min->weight;

int key=min->info;

sign[key]=1;//加入集合s

cout

free(min); }

else

min=m3->next;

m3->next=min->next;

free(min); }

//分兩種情況刪除結點

m1=li[x];

m2=li[key];

while(m1!=null&&m2!=null)

else

}//分三種情況遍歷

while(m2!=null)// 加入新的距離

cnt++;

} int a=-1;

for(int i=1;i<=n;i++)

if(sign[i]==0) cout<>n>>m;//n為點數,m為邊數

creatlist(li,n,m);

dijkstra(li,star,n,m);

return 0; }

第一次寫部落格,有點點激動

這次的**依舊是調了很久很久…

但是我還是做出來啦,雖然**可能沒有那麼漂亮

要一直加油加油~~

向professor wang看齊哇

Dijkstra 堆優化 鄰接表

在pat試題中涉及到10000個資料左右的最短路問題時,對迪傑斯特拉演算法用最小堆進行優化可以在很快時間內解決。如果不採用迪傑斯特拉演算法和鄰接表表示則很有可能超時。下面展示了用c 中stl的優先順序佇列對迪傑斯特拉演算法的優化,有了它加上dfs就可以基本解決在pat中遇到的最短路問題 大部分最短路...

Dijkstra演算法實現類 提高,鄰接表 優先佇列

總覺得前點時間寫的dijkstra,有點繁瑣,還是用回鄰接表和優先佇列感覺舒服點。廢話就不多說了,原先那篇鄰接矩陣的dijkstra鏈結如下 這次改為優先佇列,則需要乙個vertex結構,記錄其序號及到起點的cost。每次push進去佇列之前,都重新整理其最新cost。並且加了些輔助變數,如判斷是否...

Dijkstra 鄰接矩陣實現

dijkstra使用鄰接矩陣儲存圖對比於鄰接表,會佔據大量記憶體,但通常此類題目不會卡記憶體。鄰接矩陣表示的有向圖的dijkstra 單源最短路徑 演算法 頂點節點編號預設範圍為 0,n 1 即n個頂點編號不允許取到n includeusing namespace std define inf 0x...