标签:图片 出队 初始 loading 一个 算法 mamicode size_t ext
邻接表储存结构
/*邻接表的边*/
typedef struct ArcNode
{
int adjvex;
struct ArcNode *next;
}ArcNode;
/*邻接表的结点*/
typedef struct VNode
{
char date;
ArcNode *firstarc;
}VNode;
创建一个邻接表储存结构的图
//创建一个邻接表类型的图
void CreatArcGraph(int count , VNode G[])
{
ArcNode *p , *q;
char c; //储存结点内数据
int number; //储存要连接的结点
printf("请输入各个结点的数据:\n");
for (size_t i = 0; i
图的遍历(1)-----深度优先搜索
//深度优先搜索一个连通图
void DFS(VNode G[] , int v)
{
int w;
printf("%c" , G[v].date); //访问当前结点
printfed[v] = 1;
w = FirstAdj(G , v);
while (w!=-1)
{
if (printfed[w]==0)
DFS(G,w);
w = NextAdj(G , v);
}
}
//对图G = (V,E)进行深度优化搜索的主算法
void Travel_DFS(VNode G[] , int n)
{
for (size_t i = 0; i
深度优先搜索实例
#include
#include
/*邻接表的边*/
typedef struct ArcNode
{
int adjvex;
struct ArcNode *next;
}ArcNode;
/*邻接表的结点*/
typedef struct VNode
{
char date;
ArcNode *firstarc;
}VNode;
//创建一个邻接表类型的图
void CreatArcGraph(int count , VNode G[])
{
ArcNode *p , *q;
char c; //储存结点内数据
int number; //储存要连接的结点
printf("请输入各个结点的数据:\n");
for (size_t i = 0; i next = NULL;
p->adjvex = number;
if (G[i].firstarc == NULL)
{
G[i].firstarc = p;
}else
{
q->next = p;
}
q = p;
scanf("%d" , &number);
}
}
}
int printfed[3];
//寻找第一个邻接点
int FirstAdj(VNode G[] , int v)
{
return G[v].firstarc->adjvex;
}
//寻找下一个邻接点
int NextAdj(VNode G[] , int v)
{
ArcNode *p;
p = G[v].firstarc->next;
while (p->next!=NULL )
{
p = p->next;
if (printfed[p->adjvex]==0)
{
return p->adjvex;
}
}
return -1;
}
//深度优先搜索一个连通图
void DFS(VNode G[] , int v)
{
int w;
printf("%c" , G[v].date); //访问当前结点
printfed[v] = 1;
w = FirstAdj(G , v);
while (w!=-1)
{
if (printfed[w]==0)
DFS(G,w);
w = NextAdj(G , v);
}
}
//对图G = (V,E)进行深度优化搜索的主算法
void Travel_DFS(VNode G[] , int n)
{
for (size_t i = 0; i
运行结果
图的遍历(2)-------广度优先搜索
//广度优先搜索一个连通图
void BFS(VNode G[] , int v)
{
initQueue(&q);
//首先访问当前结点
printf("%c" , G[v].date);
visited[v] = 1; //访问标记
EnQueue(&q , v); //入队列
//
int w;
while (q.front==q.rear)
{
DeQueue(&q , &v);
w = Firstadj(G , v);
while (w!=-1)
{
if (visited[w]==0)
{
printf("%c",G[w].date);
EnQueue(&q , w);
visited[w] = 1;
}
w = Nextadj(G,v);
}
}
}
//广度优先搜索的主算法
void Travel_BFS(VNode G[] , int v)
{
for (size_t i = 0; i
广度优先搜索实例
如图:
#include
#include
//////////////////////////////////////////////////////////////////////////////
//储存类型定义
//图边
typedef struct ArcNode
{
int adjvex;
struct ArcNode *next;
}ArcNode;
//图结点
typedef struct VNode
{
char date;
ArcNode *firstarc;
}VNode;
//队列结点
typedef struct QNode
{
int date;
struct QNode *next;
}QNode , *QueuePtr;
//队列指针
typedef struct
{
QueuePtr front;
QueuePtr rear;
}LinkQueue;
////////////////////////////////////////////////////////////////////////////////
//队列操作
//创建队列
void initQueue(LinkQueue *q)
{
q->front = q->rear = (QueuePtr)malloc(sizeof(QNode));
if(!q->front) exit(0);
q->front->next = NULL;
}
//入队列
void EnQueue(LinkQueue *q , int v )
{
QueuePtr p;
p = (QueuePtr)malloc(sizeof(QNode));
if(!q->front) exit(0);
p->date = v;
p->next = NULL;
q->rear->next = p;
q->rear = p;
}
//出队列
void DeQueue(LinkQueue *q , int *v)
{
if (q->front==q->rear)
{
exit(0);
}
QueuePtr p;
p = q->front->next;
*v = p->date;
q->front->next = p->next;
if (q->rear==p)
{
q->front = q->rear =NULL;
}
free(p);
}
/////////////////////////////////////////////////////////////////////////////////////
//图操作
//创建一个图(邻接表)
void CreatArcNode(VNode G[] , int count)
{
//为结点数组输入数据
char c;
printf("请输入要在各个结点存入的字符...");
for (size_t i = 0; i adjvex = number;
p->next = NULL;
if (G[i].firstarc==NULL)
{
G[i].firstarc = p;
}else
{
q->next = p;
}
q = p;
scanf("%d",&number);
}
}
}
/***********************************全局变量****************************************/
int visited[100];
LinkQueue q;
/////////////////////////////////////////////////////////////////////////////////
//广度优先搜索操作
//寻找第一个邻接点
int Firstadj(VNode G[] , int v)
{
return G[v].firstarc->adjvex;
}
//寻找下一个邻接点
int Nextadj(VNode G[] , int v)
{
ArcNode *p;
p = G[v].firstarc->next;
while (!p->next)
{
p = p->next;
if (visited[p->adjvex]==0)
{
return p->adjvex;
}
}
return -1;
}
//广度优先搜索一个连通图
void BFS(VNode G[] , int v)
{
initQueue(&q);
//首先访问当前结点
printf("%c" , G[v].date);
visited[v] = 1; //访问标记
EnQueue(&q , v); //入队列
//
int w;
while (q.front==q.rear)
{
DeQueue(&q , &v);
w = Firstadj(G , v);
while (w!=-1)
{
if (visited[w]==0)
{
printf("%c",G[w].date);
EnQueue(&q , w);
visited[w] = 1;
}
w = Nextadj(G,v);
}
}
}
//广度优先搜索的主算法
void Travel_BFS(VNode G[] , int v)
{
for (size_t i = 0; i ",p->adjvex,G[p->adjvex].date);
p = p->next;
}
}while(p!=NULL);
putchar(‘\n‘);
}
//广度优先搜索
Travel_BFS(G , count);
getchar();
return 0;
}
运行结果:
数据结构C语言实现----图
标签:图片 出队 初始 loading 一个 算法 mamicode size_t ext
原文地址:https://www.cnblogs.com/jerryleesir/p/13391243.html