邻接矩阵存储结构,DFS非递归算法

#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100

typedef struct
{
int data[MAXSIZE];
int top;
}Seqstack;

void init_seqstack(Seqstack** s)
{
s=(Seqstack)malloc(sizeof(Seqstack));
(*s)->top=-1;
}

void Push_seqstack(Seqstack*s,int x)
{
if(s->top==MAXSIZE-1)
printf(“stack is full\n”);
else
{
s->top++;
s->data[s->top]=x;
}
}

void Pop_seqstack(Seqstack*s)
{
if(s->top==-1)
printf(“stack is empty\n”);
else
{
s->top–;
}
}

typedef struct
{
int vertex[MAXSIZE];
int edgs[MAXSIZE][MAXSIZE];
}MGraph;

void creatgraph(MGraph* p,int n,int e)//n为节点数,e为边数
{
int i,j,k,x;
printf(“input vertex \n”);
for(i=0;i<n;i++)//设置化节点信息
{
scanf("%d",&x);
p->vertex[i]=x;
}
for(j=0;j<n;j++)//初始化边关系
for(i=0;i<n;i++)
p->edgs[i][j]=0;

for(k=1;k<=e;k++)
{
    printf("input edge of(i,j)\n");
    scanf("%d%d",&i,&j);
    p->edgs[i][j]=1;
    p->edgs[j][i]=1;
}

}

void DFS(MGraph*g,int n)
{
int i=0,j,k=0;
int visited[MAXSIZE]={0};
Seqstack s=(Seqstack)malloc(sizeof(Seqstack));
s->top=-1;
printf("%d",g->vertex[i]);
visited[i]=1;
Push_seqstack(s,i);
while(s->top!=-1)
{
k=s->top;
for(j=0;j<n;j++)
if(g->edgs[j][k]==1&&visited[j]==0)break;
if(j<n)
{
printf("%d",g->vertex[j]);
visited[j]=1;
Push_seqstack(s,j);
}
else
Pop_seqstack(s);

}

}

int main()
{
int i,j;
MGraph M,*p=&M;
creatgraph(p,4,4);
for(i=0;i<4;i++)
{
printf("\n");
for(j=0;j<4;j++)
printf("%4d",M.edgs[i][j]);
}

   printf("\n");
DFS(p,4);

return 0;

}

猜你喜欢

转载自blog.csdn.net/cruel2436/article/details/83990277
今日推荐