数据结构:邻接矩阵为存储结构的图操作
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/*以邻接矩阵为存储结构的图操作*/
#define vnum 50
#include"stdio.h"
typedef struct
{
int vertex[vnum];
int matrix[vnum][vnum];
}adjmatrix;
adjmatrix g,*G;
int vexnum,edgenum;
int visited[vnum]={0};
int front1,rear1,q1[vnum];
void creatmat() /*创建无向图邻接矩阵*/
{
int i,j,k;
printf("please input the number of vertex &edge: ");
scanf("%d%d",&vexnum,&edgenum);
for(i=0;i
{
g.vertex[i]=i;
}
for(i=0;i
for(j=0;j
g.matrix[i][j]=0;
for(k=0;k
{
printf("input edge i & j: ");
scanf("%d%d",&i,&j);
g.matrix[i][j]=1;
g.matrix[j][i]=1;
}
}
void dfs_m(int i) /*深度优先递归遍历算法*/
{
int j;
G=&g;
printf("%3d",G->vertex[i]); /*访问输出*/
visited[i]=1;
for(j=0;j
if((G->matrix[i][j]==1)&&(!visited[j]))
dfs_m(j);
}
void bread() /*广度非递归搜索遍历算法*/
{
int marklist[vnum];
int q[vnum];
int front=0;
int rear=0;
int k,i,j;
for(k=0;k
marklist[k]=0;
printf("\\n\\n LIST BREAD VERTIX: ");
for(k=0;k
{
if(marklist[k]==0)
{
rear++; /*起始点入队列*/
q[rear]=k;
while(front!=rear) /*队列非空*/
{
front++; /*队头元素出队列*/
i=q[front];
if(marklist[i]!=1) /*如果未被访问*/
{
marklist[i]=1; /*置访问标志为1,遍历输出*/
printf("%3d",i);
}
for(j=0;j
if(g.matrix[i][j]==1&&marklist[j]==0)
{
printf("%3d",j); /*遍历输出,置访问标志,入队列*/
marklist[j]=1;
rear++;
q[rear]=j;
}
}
}
}
getch();
}
void depth() /*深度非递归搜索遍历算法*/
{
int marklist[vnum]; /*定义辅助标志数组*/
int stack[vnum]; /*定义栈*/
int top=0;
int k,j,i;
for(k=0;k
marklist[k]=0;
printf("\\n\\n list depth vextix:");
for(k=0;k
{
if(marklist[k]==0) /*出发点入栈*/
{
top++;
st
ack[top]=k;
while(top!=0) /*栈不空*/
{
i=stack[top]; /*栈顶出栈*/
top--;
if(marklist[i]!=1) /*未被访问*/
{
marklist[i]=1; /*遍历访问输出*/
printf("%3d",i);
}
for(j=0;j
if(g.matrix[i][j]!=0&&marklist[j]==0)
{
top++;
stack[top]=j;
}
}
}
}
getch();
}
void bft1() /*广度递归算法*/
{
int i,j;
while(front1!=rear1) /*队列非空*/
{
front1++; /*队列头顶点出队列*/
i=q1[front1];
if(visited[i]==0) /*未被访问过,则置标志,输出访问*/
{
visited[i]=1;
printf("%3d",i);
}
for(j=0;j
{
if(G->matrix[i][j]==1 && (!visited[j]))
{
rear1++;
q1[rear1]=j;
}
}
bft1();
}
}
void breadth1() /*广度递归搜索遍历算法*/
{
int i;
for(i=0;i
visited[i]=0;
for(i=0;i
{
if(visited[i]==0)
{
rear1++;
q1[rear1]=i;
}
bft1(); /*调用bft1递归算法*/
}
getch();
}
main()
{
clrscr();
creatmat();
bread(); /*广度非递归遍历算法*/
depth(); /*深度非递归遍历算法*/
printf("\\n\\n");
printf("list depth vertex as followed:");
dfs_m(0);/*深度递归遍历算法*/
getch();
printf("\\n\\nlist breadth vertex as followed:");
breadth1(); /*广度递归遍历算法*/
getch();
}