加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

对上面所构造的无向图,进行深度优先遍历和广度优先遍历,输出遍历序列

(2012-06-27 15:33:12)
标签:

无向图

广度优先遍历

深度优先遍历

邻接矩阵

深度优先搜索

it

#include <stdio.h>
#include <stdlib.h>
#define n 4
#define e 5
#define maxsize 10
typedef struct{
char data[maxsize];
int front,rear;
}sequeue;

typedef char vextype;
typedef int adjtype;
typedef struct
{vextype vexs[n];
 adjtype arcs[n][n];
}graph;

graph *p;
sequeue *q;
int visited[n]={0,0,0,0};

//无向图的邻接矩阵建立
void creatgraph()
{
 int i,j,k;
 int w;
 
 for(i=0;i<n;i++)
  p->vexs[i]=getchar();
 for(i=0;i<n;i++)
 for(j=0;j<n;j++)
   p->arcs[i][j]=0;
 for(k=0;k<e;k++)
 {
   scanf("%d%d%d",&i,&j,&w);
   p->arcs[i][j]=w;
   p->arcs[j][i]=w;
 }
 printf("用邻接矩阵建立无向图为:\n");
 for(i=0;i<n;i++)
 {
  for(j=0;j<n;j++)
   printf("%d ",p->arcs[i][j]);
      printf("\n"); }
}


//深度优先遍历无向图
void DFS(int i)
{
 int j;
 printf("%c  ",p->vexs[i]);
 visited[i]=1;
 for(j=0;j<n;j++)
  if(p->arcs[i][j]==1&&(!visited[j]))
  DFS(j);
}

//对列入队
void  enqueue(sequeue *sq,char x)
{if(sq->front==(sq->rear+1)%maxsize)
{printf("queue is full"); }
else
{sq->rear=sq->rear+1%maxsize;
 sq->data[sq->rear]=x;
}
}

//对列出队
char dequeue(sequeue *q)
{if(q->rear==q->front)
{printf("queue is empty");return NULL;}
else
{q->front=(q->front+1)%maxsize;
  return q->data[q->front];
}
}

//广度优先遍历无向图
void BFS(int k)
{
  int i=0,j=0;
  q=(sequeue*)malloc(sizeof(sequeue));
  q->front=-1;q->rear=-1;
  printf("%c ",p->vexs[k]);
  visited[k]=1;
  enqueue(q,k);
  while(!(q->rear==q->front))
  {
    if((p->arcs[i][j])==1&&(!visited[j]))
 {printf("%c",p->vexs[j]);
   visited[j]=1;
   enqueue(q,j);
     }
  }
}

void main()
{p=(graph*)malloc(sizeof(graph));
 creatgraph();
 printf("深度优先搜索遍历无向图为:\n");
 DFS(0);
}

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有