原創,未經允許不得轉載。
圖的建立有兩種,鄰接矩陣和鄰接表。
鄰接矩陣適用於圖較為密集,(稀疏圖太浪費存儲空間了),圖如果較為稀疏,則使用鄰接表為宜,dijkstra算法就是以鄰接表為基礎的。
有向無權圖
#include<iostream> #include <vector> #include <algorithm> #include <queue> #include <stack> using namespace std; #define N 100000+5 vector<int >p[N]; int main() { int n,m; cin>>n>>m; int start,to; for (int i=0;i<m;i++) { cin>>start>>to; p[start].push_back(to); } for (int i=1;i<=n;i++) { for (int j=0;j<p[i].size();j++) { cout<<p[i][j]<<" "; }cout<<endl; }cout<<endl; }
無向無權圖的建立:
#include<iostream> #include <vector> #include <algorithm> #include <queue> #include <stack> #include <set> #include <cstdio> #include <iterator> #include <cstring> using namespace std; #define N 100000+5 vector<int >p[N]; int main() { int n,m; cin>>n>>m; int start,to; for (int i=0;i<m;i++) { cin>>start>>to; p[start].push_back(to); p[to].push_back(start); } for (int i=1;i<=n;i++) { for (int j=0;j<p[i].size();j++) { cout<<p[i][j]<<" "; }cout<<endl; }cout<<endl; }
有向有權圖的建立:
#include<iostream> #include <vector> #include <algorithm> #include <queue> #include <stack> #include <set> #include <cstdio> #include <iterator> #include <sstream> #include <cmath> #include <list> #include <deque> #include <cstring> using namespace std; #define N 100000+5 struct node { int to,cost; }; vector<node >p[N]; int main() { int n,m; cin>>n>>m; int start,to; for (int i=0;i<m;i++) { node c; cin>>start>>c.to>>c.cost; p[start].push_back(c); } cout<<endl; for (int i=1;i<=n;i++) { for (int j=0;j<p[i].size();j++) { cout<<i<<" "<<p[i][j].to<<" "<<p[i][j].cost<<" "<<endl; } }cout<<endl; }
無向有權圖的建立:
