目录
图的存储方式:
邻接矩阵:
代码实现:
邻接表:
代码实现:
邻接矩阵邻接表对比:
带权图:
邻接矩阵存储:
邻接表存储(代码实现):
图的存储方式:
邻接矩阵:
无向图的邻接矩阵是对称的,2是自环
用来计算顶点的入度和出度,入度看行,出度看列
代码实现:
int G[n][n];
memset(G,0,sizeof(G)); //初始化数组0
G[u][v]=G[v][u]=1;//插入无向边
G[u][v]=1;//插入有向边
邻接表:
当数据中0较多,比较占用内存空间,可以考虑用邻接表
每一行第一列表示的是最外层vector数组的下标
代码实现:
//用二维动态数组来存储邻接表
#include<iostream>
#include<vector>
using namespace std;
int main(){vector<int>G[11]; int m;cin>>m;//m条边for(int i=0;i<m;i++){int a,b; //从顶点a指向b的边cin>>a>>b;G[a].push_back(b);//G[b].push_back(a);存无向图a与b互换}for(int i=1;i<=m;i++){cout<<i<<" ";for(int j=0;j<G[i-1].size();j++){cout<<G[i][j]<<" ";}cout<<endl;}return 0;
}
邻接矩阵邻接表对比:
带权图:
边的权值简称边权
邻接矩阵存储:
邻接表存储(代码实现):
#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;//10 假设要存入的边为10for(int i=0;i<m;i++){int u,v,w;cin>>u>>v>>w; //从u指向v的有向边,边权winsert2(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;
}