그림 의 깊이 우선 옮 겨 다 니 기
9981 단어 데이터 구조
그림 의 깊이 를 우선 적 으로 옮 겨 다 니 며 그림 의 옮 겨 다 니 기 (무 방향 그림 기반 인접 표 저장 구조)
#pragma once
#include
#include
#include
#define Max_size 10
#define T char
typedef struct Edges
{
int dex;//
struct Edges *link;//
}Edges;
typedef struct Vertex
{
T data;//
Edges *adj;//
}Vertex;
typedef struct Graph_table
{
int MaxVertices;//
int NmuVertices; //
int NumEdges; //
Vertex *NnodeTable;// ,
}Graph_table;
void InitGraph(Graph_table *gt)
{
gt->MaxVertices = Max_size;
gt->NmuVertices = gt->NumEdges = 0;
gt->NnodeTable = (Vertex*)malloc(sizeof(Vertex)*(gt->MaxVertices));
assert(NULL != gt->NnodeTable);
for(int i= 0;i<gt->MaxVertices;++i)
{
gt->NnodeTable[i].adj = NULL;
}
}
void InsertVertex(Graph_table *gt,T x)//
{
if(gt->NmuVertices >= gt->MaxVertices)
return;
gt->NnodeTable[gt->NmuVertices++].data = x;
}
void Show(Graph_table *gt)
{
Edges *p;
for(int i=0;i<gt->NmuVertices;++i)
{
printf("%d , %c : ",i,gt->NnodeTable[i].data);
p = gt->NnodeTable[i].adj;
while(NULL != p)
{
printf("%d --> ",p->dex);
p = p->link;
}
printf("NULL.
");
}
printf("
");
}
int Getpos(Graph_table *gt,T x) //
{
for(int i= 0;i<gt->NmuVertices;++i)
{
if(gt->NnodeTable[i].data == x)
return i;
}
return -1; //
}
void InsertEdge(Graph_table *gt,T x,T y) //
{
int p1 = Getpos(gt,x);
int p2 = Getpos(gt,y);
if(p1==-1 || p2==-1)
return;
Edges *s;
s = (Edges *)malloc(sizeof(Edges));//
assert(s != NULL);
s->dex = p2; //x-->y x y
s->link = gt->NnodeTable[p1].adj;
gt->NnodeTable[p1].adj = s;
s = (Edges *)malloc(sizeof(Edges));//
assert(s != NULL);
s->dex = p1; //y-->x y x
s->link = gt->NnodeTable[p2].adj;
gt->NnodeTable[p2].adj = s;
gt->NumEdges++;
}
typedef int Boolean;
Boolean visited[Max_size];
void DFS(Graph_table *gt,int i) //
{
Edges *p;
visited[i] = true;
printf("%c ",gt->NnodeTable[i].data);
p = gt->NnodeTable[i].adj;
while(p)
{
if(!visited[p->dex])
DFS(gt,p->dex);
p = p->link;
}
}
void DFSvisit(Graph_table *gt) //
{
int i;
for(i=0;i<gt->NmuVertices;++i)
{
visited[i] = false;
}
for(i=0;i<gt->NmuVertices;++i)
{
if(!visited[i])
DFS(gt,i);
}
}
#include"Graph_DFS.h"
void main()
{
Graph_table gt; //
InitGraph(>); //
InsertVertex(>,'A');//
InsertVertex(>,'B');
InsertVertex(>,'C');
InsertVertex(>,'D');
InsertVertex(>,'E');
Show(>);
InsertEdge(>,'A','B');//
InsertEdge(>,'A','D');
InsertEdge(>,'B','C');
InsertEdge(>,'B','E');
InsertEdge(>,'C','D');
InsertEdge(>,'C','E');
Show(>);
DFSvisit(>);//
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.