图的建立,vector容器+图的遍历
前言:最近开始学习图论了,就先把图的基本知识记下来,其余的看代码,有注释。
```cpp
#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
#include<queue>
#include<set>
#include<cstdio>
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
using namespace std;
typedef long long ll;
struct node{
int v; //另一个点
int w; //边权,或者说权重
//可以理解为java里的构造函数
node(int x,int y){
v=x;
w=y;
}
};
vector<node> graph[108] ; //图
void add(int x,int y,int z) {
graph[x].push_back(node(y,z)); //代表x点到y点,权重为z
}
//图的建立
void build(int n,int m) {
//n个顶点,m条边
for(int i=1;i<=m;i++) {
int x,y,z;
//x点到y点的一条边,权重为z
cin>>x>>y>>z;
//无向图要建两条边,有向图直接一条就好(即:add(x,y,z))
add(x,y,z);
add(y,x,z);
}
}
//定义一个状态
int vis[108];
void dfs(int x){ //dfs,不懂的自己找视频看看
for(int i=0;i<graph[x].size();i++){
//下一个顶点
node next=graph[x][i];
if(vis[next.v]){
//如果到过就跳过吧
continue;
}
else{
//否则就找下一个没到过的点
vis[next.v]=1;
dfs(next.v);
}
}
}
//图的遍历
void Traversal(int n){
memset(vis,0,sizeof(vis));
for(int i=1;i<=n;i++){
if(!vis[i]){
vis[i]=1;
dfs(i);
}
}
}
int main(){
IOS;
int n,m; //n个顶点,m条边
cin>>n>>m;
// build(n,m);
// Traversal(n);
return 0;
//没了
}
以后可能会更改,有不足之处,请直接点出来。