《 데이터 구 조 》 06 - 그림 1 은 연결 집합 을 보 여 준다.
14623 단어 데이터 구조데이터 구조 (저장 성)
N 개의 정점 과 E 개의 변 이 있 는 무 방향 그림 을 지정 합 니 다. DFS 와 BFS 로 각각 모든 연결 집합 을 보 여 주 십시오.정점 을 0 에서 N - 1 번 으로 가정 하 다.검색 을 할 때, 우리 가 항상 번호 가 가장 작은 정점 에서 출발 하여 번호 가 증가 하 는 순서에 따라 인접 지점 에 접근한다 고 가정 합 니 다.
입력 형식: 첫 번 째 줄 을 입력 하면 2 개의 정수 N (0 < N ≤ 10) 과 E E 를 보 여 줍 니 다. 각각 그림 의 정점 과 변 수 를 보 여 줍 니 다.그 다음 에 E 줄 은 줄 마다 한 변 의 두 점 을 제시 합 니 다.줄 마다 숫자 사 이 를 1 칸 으로 구분한다.
출력 형식: "{v 1 v 2... v k v 1 v 2... v k v1 v2.. vk}" 형식 으로 줄 마다 연결 집합 을 출력 합 니 다.DFS 결 과 를 먼저 출력 하고 BFS 결 과 를 출력 합 니 다.
입력 예시:
8 6 0 7 0 1 2 0 4 1 2 4 3 5
출력 예시:
{ 0 1 4 2 7 } { 3 5 } { 6 } { 0 1 2 7 4 } { 3 5 } { 6 }
분석 하 다.
DFS 와 BFS DFS 는 스 택 의 '한 길 로 끝까지 간다' 는 것 을 고찰 하기 때문에 재 귀 를 통 해 BFS 를 실현 할 수 있 으 면 대열 의 도움 을 받 아 한 걸음 한 걸음 주변 에서 갈 수 있 는 위 치 를 모두 입대 시 켜 야 한다.
#include
#include
#include
#define MaxVertex 100
typedef int Vertex;
int G[MaxVertex][MaxVertex];
bool visit[MaxVertex];
int Ne,Nv;
using namespace std;
//
void Build(){
cin>>Nv;
for(int i=0;i<Nv;i++){
visit[i] = false; //
for(int j=0;j<Nv;j++)
G[i][j] = 0;
}
cin>>Ne;
for(int i=0;i<Ne;i++){
int v1,v2;
cin>>v1>>v2;
G[v1][v2] = 1;
G[v2][v1] = 1;
}
}
void DFS(Vertex v){
//
visit[v] = true;
cout<<" "<<v;
for(int i=0;i<Nv;i++)
if(!visit[i] && G[v][i])
DFS(i);
}
void BFS(Vertex v){
queue<Vertex> q;
//
visit[v] = true;
cout<<" "<<v;
//
q.push(v);
while(!q.empty()){
//
Vertex tmp = q.front();
q.pop();
for(Vertex i=0;i<Nv;i++){
// ,
if(!visit[i] && G[i][tmp]){
visit[i] = true;
cout<<" "<<i;
q.push(i);
}
}
}
}
//
void ListComp(){
for(Vertex i=0;i<Nv;i++)
if(!visit[i]){
cout<<"{";
DFS(i);
cout<<" }"<<endl;
}
//
for(Vertex i=0;i<Nv;i++)
visit[i] = false;
for(Vertex i=0;i<Nv;i++)
if(!visit[i]){
cout<<"{";
BFS(i);
cout<<" }"<<endl;
}
}
int main(){
Build();
ListComp();
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.