題目:編寫程式,實現以鄰接表做儲存結構,實現求源點到其餘各頂點的最短距離
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...