图的遍历
深度优先遍历:
邻接矩阵版
bool G[1000][1000]; bool visited[1000]; void dfs(int v){ visited[v]=true; for(int i=1;i<=n;i++){ if(G[v][i]==true){ if(visited[i]==false){ dfs(i); } } } } void dfsTraverse(){ fill(visited,visited+n+1,false); //初始化visited数组 for(int i=1;i<=n;i++){ //n是图中顶点数量 if(visited[i]==false){ dfs(i); } } }
邻接表版
vector<int> G[1000]; bool visited[1000]; void dfs(int v){ visited[v]=true; for(int i=0;i<G[v].size();i++){ if(G[v][i]==true){ if(visited[i]==false){ dfs(i); } } } } void dfsTraverse(){ fill(visited,visited+n+1,false); //初始化visited数组 for(int i=1;i<=n;i++){ //n是图中顶点数量 if(visited[i]==false){ dfs(i); } } }
广度优先遍历
邻接矩阵版:
void bfs(int v){ queue<int> q; q.push(v); while(!q.empty()){ int temp=q.front(); q.pop(); visited[v]=true; for(int i=1;i<=n;i++){ if(G[temp][i]==true&&visited[i]==false){ visited[i]=true; q.push(i); } } } } void bfsTraverse(){ fill(visited,visited+n+1,false); //初始化visited数组 for(int i=1;i<=n;i++){ //n是图中顶点数量 if(visited[i]==false){ bfs(i); } } }
邻接表版:
vector<int> G[1000]; bool visited[1000]; void bfs(int v){ queue<int> q; q.push(v); while(!q.empty()){ int temp=q.front(); q.pop(); visited[v]=true; for(int i=0;i<G[temp].size();i++){ if(G[temp][i]==true&&visited[i]==false){ visited[i]=true; q.push(i); } } } } void bfsTraverse(){ fill(visited,visited+n+1,false); //初始化visited数组 for(int i=1;i<=n;i++){ //n是图中顶点数量 if(visited[i]==false){ bfs(i); } } }