分类
1.方向
若顶点v和u之间的边没有方向,则称这条边为无向边
若一张图每条边都为无向边,则称这张图为无向图
相反,为有向图
2.简单图
简单图:在图中若不存在顶点带其自身的边,且同一条边不重复出现
概念
顶点的度:在无向图中,顶点v的度是指依附于该顶点的边数
顶点的入度:在有向图中,顶点v的入度是指以该顶点为弧头的弧的数目
顶点的出度:在有向图中,顶点v的出度是指以该顶点为弧尾的弧的数目
定理
1.无向图定理:所有顶点度数之和=边数的2倍
2.有向图定理:入度之和=出度之和=边数
开始学习特别特别特别特别特别特别特别难的内容啦
深度优先搜索DFS
void dfs(int u){//u:当前节点
vis[u]=true;
for(int& v:g[u]){//访问u连到的每个节点
if(!vis[v]) dfs(v);
}
}
广度优先搜索BFS
#include <bits/stdc++.h>
using namespace std;
int main()
{
int graph[6][6]={
{0,1,1,0,0,0},
{1,0,0,1,1,0},
{1,0,0,0,1,1},
{0,1,0,0,0,1},
{0,1,1,0,0,1},
{0,0,1,1,1,0}
};
int start=0,end=5;
queue<int> q;
bool visited[6]={false};
int distance[6]={0};
q.push(start);
visited[start]=true;
while (!q.empty()){
int curr=q.front();
q.pop();
for(int i=0;i<6;i++){
if(graph[curr][i]==1&&!visited[i]){
q.push(i);
visited[i]=true;
distance[i]=distance[curr]+1;
}
}
}
cout<<"The shortest distance from "<<start<<" to "<<end<<" is "<<distance[end]<<endl;
return 0;
}