数据结构:邻接矩阵为存储结构的图操作

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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();

}

相关文档
最新文档