日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

实现邻接表

發布時間:2025/3/12 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 实现邻接表 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目

無向圖,共有10個點,輸入m條邊。
輸入:
10
1 2
2 4
3 4
5 6
7 9
10 1
8 9
9 5
3 7
3 8
輸出:
1 : 2 10
2 : 1 4
3 : 4 7 8
4 : 2 3
5 : 6 9
6 : 5
7 : 9 3
8 : 9 3
9 : 7 8 5
10 : 1

代碼:

#include <iostream> #include<vector> using namespace std; int main() {vector<int>G[11];int m;cin>>m;for(int i=0;i<m;++i){int a,b;cin>>a>>b;G[a].push_back(b);G[b].push_back(a);}for(int i=1;i<=10;i++){cout<<i<<" : ";for(int j=0;j<G[i].size();j++){cout<<G[i][j]<<" ";}cout<<endl;}return 0; }

題目:

帶權圖
10
1 2 3
2 4 4
3 4 2
5 6 1
7 9 0
10 1 -7
8 9 -4
9 5 10
3 7 11
3 8 20
輸出:
(1, 2, 3)
(1, 10, -7)
(2, 1, 3)
(2, 4, 4)
(3, 4, 2)
(3, 7, 11)
(3, 8, 20)
(4, 2, 4)
(4, 3, 2)
(5, 6, 1)
(5, 9, 10)
(6, 5, 1)
(7, 9, 0)
(7, 3, 11)
(8, 9, -4)
(8, 3, 20)
(9, 7, 0)
(9, 8, -4)
(9, 5, 10)
(10, 1, -7)

代碼:

#include <iostream> #include <vector> using namespace std; struct node{int v,w; }; vector<node> G[11]; void insert1(int u,int v,int w){node temp;temp.v=v;temp.w=w;G[u].push_back(temp); } void insert2(int u,int v,int w){insert1(u,v,w);insert1(v,u,w); } void input(){int m;cin>>m;for(int i=0;i<m;++i){int u,v,w;cin>>u>>v>>w;insert2(u,v,w);} } void output() {for(int i=1;i<=10;++i){for(int j=0;j<G[i].size();j++){cout<<"("<<i<<", "<<G[i][j].v<<", "<<G[i][j].w<<")"<<endl;}} } int main() {input();output();return 0; }

鏈表實現

const int M = 1000000; const int N = 10000; struct edge {int v, d, next; } e[M]; int p[N], eid; void init() { // 初始化,在建圖之前必須進行memset(p, -1, sizeof(p));eid = 0; } void insert(int u, int v, int d) { // 插入單向邊e[eid].v = v;e[eid].d = d;e[eid].next = p[u];p[u] = eid++; } void insert2(int u, int v, int d) { // 插入雙向邊insert(u, v, d);insert(v, u, d); } void output(int n) { // 輸出整張圖中的所有邊for (int i = 0; i < n; i++) {for (int j = p[i]; j != -1; j = e[j].next) { // 遍歷從 i 連出的所有邊cout << i << "->" << e[j].v << ", " << e[j].d << endl;}} }

總結

以上是生活随笔為你收集整理的实现邻接表的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。