存储图
可用邻接矩阵和邻接表存储,当图中点个数不超过1000时都可用邻接矩阵。
遍历图
- dfs
直接递归
int G[max][max];//邻接矩阵
int n;//顶点
bool vis[max]={
false};
void dfs(int a){
vis[a]=true;
for(int i=0;i<n;i++){
if(G[a][i]!=inf&&vis[i]==false){
dfs(i);
};
};
}
void set_dfs(){
for(int i=0;i<n;i++){
if(vis[i]==false){
dfs(i);
};
};
}
//确保每个连通块都被访问
- bfs
用辅助队列
int G[max][max];
int n;
int vis[max]={
false};//顶点曾入过队列
void bfs(s){
queue<int>q;
q.push(s);
while(!q.empty()){
int t=q.front();
q.pop();
for(int i=0;i<n;i++){
if(G[t][i]!=inf&&vis[i]==false){
q.push(i);
vis[i]==true;
};
};
};