📄 tu1.h
字号:
#define MAX_V 20
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include "tu2.h"
typedef struct{
int Vertex[MAX_V];//顶点
int R[MAX_V][MAX_V];//邻接矩阵数组
int vexnum;//顶点号
}Graph;
void creatgraph(Graph *g,int n)
{
int i,j,start,end;
g->vexnum=n;
for(i=1;i<=n;i++)
{
g->Vertex[i]=i;
}
for(i=1;i<=n;i++)/*初始化R*/
for(j=1;j<=n;j++)
{
g->R[i][j]=0;
}
printf("请输入关系图列如1,2 2,3 并且用0,0结束:\n");
scanf("%d,%d",&start,&end);
while(start!=0&&end!=0)
{
g->R[start][end]=1;
g->R[start][end]=1;
scanf("%d,%d",&start,&end);
}
}
void printgraph(Graph *g)/*打印图的邻接矩阵*/
{
int i,j;
for(i=1;i<=g->vexnum;i++)
{ for(j=1;j<=g->vexnum;j++)
{
printf("%2d ",g->R[i][j]);
}
printf("\n");
}
}
int visited[MAX_V];
void visitvex(Graph *g,int vex)/*访问顶点*/
{
printf("%d ",g->Vertex[vex]);
}
int firstadjvex(Graph *g,int vex)/*获取第一个未被访问的邻接节点*/
{
int w,i;
for(i=1;i<=g->vexnum;i++)
{
if(g->R[vex][i]==1&&visited[i]==0)
{
w=i;
break;
}
else
{
w=0;
}
}
return w;
}
int nextadjvex(Graph *g,int vex,int w)/*获取下一个未被访问的邻接节点(深度遍历)*/
{
int t;
t=firstadjvex(g,w);
return t;
}
void dfs(Graph *g,int vex)
{
int w;
visited[vex]=1;
visitvex(g,vex);
for(w=firstadjvex(g,vex);w>0;w=nextadjvex(g,vex,w))
if(!visited[w])
{
dfs(g,w);
}
}
void dfstraverse(Graph *g)
{
int i;
for(i=1;i<=g->vexnum;i++)
visited[i]=0;
for(i=1;i<=g->vexnum;i++)
if(!visited[i])
{dfs(g,i);}
}
void BESTraverse(Graph *g)
{
int i;
Queue *q=(Queue *)malloc(sizeof(Queue));
for(i=1;i<=g->vexnum;i++)
{
visited[i]=0;
}
initqueue(q);
for(i=1;i<=g->vexnum;i++)
{
if(!visited[i])
{
visited[i]=1;
visitvex(g,g->Vertex[i]);
enqueue(q,g->Vertex[i]);
while(!quempty(q))
{
int u,w;
u=dequeue(q);
for(w=firstadjvex(g,u);w>0;w=nextadjvex(g,u,w))
{
if(!visited[w])
{
visited[w]=1;
visitvex(g,w);
enqueue(q,w);
}
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -