그림 의 조작 --- 건설 도, DFS, BFS 스 트 리밍 도
49421 단어 데이터 구조
#include
(2) 저장 구조
typedef struct ENode{
vertex V1,V2;
}*Edge;
typedef struct GNode{
int Nv;
int Ne;
int G[MaxSize][MaxSize];
}*MGraph;
(3) 주 함수
int main(){
int N,E;
MGraph Graph;
scanf("%d%d",&N,&E); //
Graph=InitGraph(N); //
Graph=CreateGraph(Graph,E);//
total_DFS(Graph); //DFS
total_BFS(Graph);//BFS
return 0;
}
(4) 그림 초기 화
MGraph InitGraph(int N){
MGraph Graph;
Graph=(MGraph)malloc(sizeof(struct GNode));
Graph->Nv=N; //
Graph->Ne=0; // 0
int V,W;
for(V=0;V<Graph->Nv;V++)
for(W=0;W<Graph->Nv;W++)
Graph->G[V][W]=0;
for(V=0;V<Graph->Nv;V++){
Visited_DFS[V]=0; //
Visited_BFS[V]=0; //
}
return Graph;
}
삽입 변
void InsertEdge(MGraph Graph,Edge E){
Graph->G[E->V1][E->V2]=1;
Graph->G[E->V2][E->V1]=1;
}
구조 도
MGraph CreateGraph(MGraph Graph,int Ne){
Graph->Ne=Ne;
Edge E;
if(Graph->Ne!=0){
E=(Edge)malloc(sizeof(struct ENode));
for(int i=0;i<Graph->Ne;i++){
scanf("%d %d",&E->V1,&E->V2);
InsertEdge(Graph,E);
}
}
return Graph;
}
DFS 옮 겨 다 니 기
void DFS(MGraph Graph,vertex V){
printf(" %d",V);
Visited_DFS[V]=1;
vertex W;
for(W=0;W<Graph->Nv;W++)
if(!Visited_DFS[W]&&Graph->G[V][W]==1)
DFS(Graph,W);
}
void total_DFS(MGraph Graph){
vertex V;
for(V=0;V<Graph->Nv;V++){
if(Visited_DFS[V]==0)
{ printf("{");
DFS(Graph,V);
printf(" }");
printf("
");}
}
}
BFS 옮 겨 다 니 기
void BFS(MGraph Graph,vertex V){
Queue Q;
Q=InitQ();
AddQ(Q,V);
Visited_BFS[V]=1;
printf(" %d",V);
vertex W;
while(!IsEmpty(Q)) {
V=DeleteQ(Q);
for(W=0;W<Graph->Nv;W++){
if(!Visited_BFS[W]&&Graph->G[V][W]==1){
printf(" %d",W);
AddQ(Q,W);
Visited_BFS[W]=1;
}
}
}
}
우 리 는 여기에 대열 을 짓 고, 대열 을 나 가 고, 대열 에 들 어 가 는 조작 대열 의 유형 정 의 를 진행 해 야 한다.
typedef struct QNode{
int Data[10];
int front;
int rear;
}*Queue;
초기 화
Queue InitQ(){
Queue Q;
Q=(Queue)malloc(sizeof(struct QNode));
Q->front=Q->rear=0;
return Q;
}
//
int IsEmpty(Queue Q){
return Q->front==Q->rear;
}
대열 에 들어가다
void AddQ(Queue Q,vertex V){
if((Q->rear+1)%MaxSize!=Q->front)
{ Q->rear=(Q->rear+1)%MaxSize;
Q->Data[Q->rear]=V;
}
}
대열 에 나가다
int DeleteQ(Queue Q){
if(Q->front==Q->rear) return -1;
else {
Q->front=(Q->front+1)%MaxSize;
return Q->Data[Q->front];
}
}
전체 코드
#include
#include
typedef int vertex;
#define MaxSize 10
int Visited_DFS[MaxSize];
int Visited_BFS[MaxSize];
typedef struct ENode{
vertex V1,V2;
}*Edge;
typedef struct GNode{
int Nv;
int Ne;
int G[MaxSize][MaxSize];
}*MGraph;
typedef struct QNode{
int Data[10];
int front;
int rear;
}*Queue;
//
Queue InitQ(){
Queue Q;
Q=(Queue)malloc(sizeof(struct QNode));
Q->front=Q->rear=0;
return Q;
}
int IsEmpty(Queue Q){
return Q->front==Q->rear;
}
void AddQ(Queue Q,vertex V){
if((Q->rear+1)%MaxSize!=Q->front)
{ Q->rear=(Q->rear+1)%MaxSize;
Q->Data[Q->rear]=V;
}
}
int DeleteQ(Queue Q){
if(Q->front==Q->rear) return -1;
else {
Q->front=(Q->front+1)%MaxSize;
return Q->Data[Q->front];
}
}
MGraph InitGraph(int N){
MGraph Graph;
Graph=(MGraph)malloc(sizeof(struct GNode));
Graph->Nv=N;
Graph->Ne=0;
int V,W;
for(V=0;V<Graph->Nv;V++)
for(W=0;W<Graph->Nv;W++)
Graph->G[V][W]=0;
for(V=0;V<Graph->Nv;V++){
Visited_DFS[V]=0;
Visited_BFS[V]=0;
}
return Graph;
}
void InsertEdge(MGraph Graph,Edge E){
Graph->G[E->V1][E->V2]=1;
Graph->G[E->V2][E->V1]=1;
}
MGraph CreateGraph(MGraph Graph,int Ne){
Graph->Ne=Ne;
Edge E;
if(Graph->Ne!=0){
E=(Edge)malloc(sizeof(struct ENode));
for(int i=0;i<Graph->Ne;i++){
scanf("%d %d",&E->V1,&E->V2);
InsertEdge(Graph,E);
}
}
return Graph;
}
void DFS(MGraph Graph,vertex V){
printf(" %d",V);
Visited_DFS[V]=1;
vertex W;
for(W=0;W<Graph->Nv;W++)
if(!Visited_DFS[W]&&Graph->G[V][W]==1)
DFS(Graph,W);
}
void total_DFS(MGraph Graph){
vertex V;
for(V=0;V<Graph->Nv;V++){
if(Visited_DFS[V]==0)
{ printf("{");
DFS(Graph,V);
printf(" }");
printf("
");}
}
}
void BFS(MGraph Graph,vertex V){
Queue Q;
Q=InitQ();
AddQ(Q,V);
Visited_BFS[V]=1;
printf(" %d",V);
vertex W;
while(!IsEmpty(Q)) {
V=DeleteQ(Q);
for(W=0;W<Graph->Nv;W++){
if(!Visited_BFS[W]&&Graph->G[V][W]==1){
printf(" %d",W);
AddQ(Q,W);
Visited_BFS[W]=1;
}
}
}
}
void total_BFS(MGraph Graph){
vertex V;
for(V=0;V<Graph->Nv;V++){
if(Visited_BFS[V]==0)
{ printf("{");
BFS(Graph,V);
printf(" }");
printf("
");}
}
}
int main(){
int N,E;
MGraph Graph;
scanf("%d%d",&N,&E);
Graph=InitGraph(N);
Graph=CreateGraph(Graph,E);
total_DFS(Graph);
total_BFS(Graph);
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에 따라 라이센스가 부여됩니다.