数据结构题.假定无向图G有6个结点和9条边,.(1) 画出G的邻接距阵和邻接表(2) 根据邻接表从顶点3假定无向图G有6个结点和9条边,并依次输入这9条边为(0,1)(0,2)(0,4)(0,5)(1,2)(2,3)(2

来源:学生作业帮助网 编辑:作业帮 时间:2024/04/28 07:43:30
数据结构题.假定无向图G有6个结点和9条边,.(1) 画出G的邻接距阵和邻接表(2) 根据邻接表从顶点3假定无向图G有6个结点和9条边,并依次输入这9条边为(0,1)(0,2)(0,4)(0,5)(1,2)(2,3)(2

数据结构题.假定无向图G有6个结点和9条边,.(1) 画出G的邻接距阵和邻接表(2) 根据邻接表从顶点3假定无向图G有6个结点和9条边,并依次输入这9条边为(0,1)(0,2)(0,4)(0,5)(1,2)(2,3)(2
数据结构题.假定无向图G有6个结点和9条边,.(1) 画出G的邻接距阵和邻接表(2) 根据邻接表从顶点3
假定无向图G有6个结点和9条边,并依次输入这9条边为(0,1)(0,2)(0,4)(0,5)(1,2)(2,3)(2,4)(3,4)(4,5) (1) 画出G的邻接距阵和邻接表.(2) 根据你的邻接表从顶点3出发,分别写出按深度优先搜索法和广度优先搜索法进行遍历的结点序列.

数据结构题.假定无向图G有6个结点和9条边,.(1) 画出G的邻接距阵和邻接表(2) 根据邻接表从顶点3假定无向图G有6个结点和9条边,并依次输入这9条边为(0,1)(0,2)(0,4)(0,5)(1,2)(2,3)(2

#include<stdio.h>

#include<stdlib.h>

#include<conio.h>

#include<malloc.h>

#define maxsize 64

#define TRUE 1

#define FALSE 0

#define  n  6

#define  e  9

typedef char datatype ;

typedef char vextype;

typedef int adjtype;

 

typedef struct 

{

 vextype vexs[maxsize];

 adjtype arcs[maxsize][maxsize];

}graph;

 

typedef struct 

{

 datatype data[maxsize];

 int front,rear;

}sequeue;

 

typedef struct node 

{

 int adjvex;

 struct node *next;

}edgenode;

typedef struct

{

 vextype vertex;

 edgenode *link;

}vexnode;

 

vexnode gl[maxsize];

graph  *ga;

sequeue *Q;

 

graph *CREATGRAPH()

{

 int i,j,k;

 char ch;

 system("cls");

 scanf("%c",&ch);

 printf("\n请输入顶点信息(邻接矩阵):  ");

 for(i=1;i<=n;i++)

  scanf("%c",&ga->vexs[i]);

 for(i=1;i<=n;i++)

  for(j=1;j<=n;j++)

   ga->arcs[i][j]=0;

  printf("\n输入节点信息与权值:\n");

  for(k=0;k<e;k++)

  {

   scanf("%d%d",&i,&j);//读入一条变得两端顶点序号i,j及边上的权值

   ga->arcs[i][j]=1;

   ga->arcs[j][i]=1;

  }

  return ga;

}

 

void PRINT()

{

 int i,j;

 system("cls");

 printf("\n对应的邻接矩阵是:\n\n");

 for(i=1;i<=n;i++)

 {

  for(j=1;j<=n;j++)

   printf("%5d",ga->arcs[i][j]);

  printf("\n");

 }

}

 

void CREATADJLIST()

{

 int i,j,k;

 edgenode *s;

 char ch;

 system("cls");

 printf("请输入顶点信息:  ");

 scanf("%c",&ch);

 for(i=1;i<=n;i++)

 { 

  gl[i].vertex=getchar();

  gl[i].link=NULL;

 }

 printf("输入边表节点信息:\n");

 for(k=1;k<=e;k++)

 {

      scanf("%d %d",&i,&j);

      s=(edgenode *)malloc(sizeof(edgenode));

      s->adjvex=j;

      s->next=gl[i].link;

      gl[i].link=s;

      s=(edgenode *)malloc(sizeof(edgenode));

      s->adjvex=i;

      s->next=gl[j].link;

      gl[j].link=s;

    }

}

 

void PRINTL()

{

 int i;

 edgenode *s;

 system("cls");

 printf("\n对应的邻接表是:\n");

 for(i=1;i<=n;i++)

 {

   s=gl[i].link;

   printf("%3c",gl[i].vertex);

 

   while(s!=NULL)

   {

  printf("%5d",s->adjvex);

  s=s->next;

   }

   printf("\n");

 }

}

 

sequeue *SETNULL(sequeue *P)

{

 P->front=maxsize-1;

 P->rear=maxsize-1;

 return P;

}

 

int EMPTY(sequeue *Q)

{

 if(Q->rear==Q->front)

  return TRUE;

 else

  return FALSE;

}

 

sequeue *ENQUEUE(sequeue *Q,int k)

{

 if(Q->front==(Q->rear+1)%maxsize)

 {

  printf("队列已满!\n");

  return NULL;

 }

 else

 {

  Q->rear=(Q->rear+1)%maxsize;

  Q->data[Q->rear]=k;

 }

 return Q;

}

int DEQUEUE(sequeue *Q)

{

 if(EMPTY(Q))

 {

  printf("队列为空,无法出队!\n");

  return FALSE;

 }

 else

 {

  Q->front=(Q->front+1)%maxsize;

  return Q->data[Q->front];

 }

 return 1;

}

void BFS(int k)

{

  int i,j;

  int visited[maxsize]={0};

  printf("\n广度优先遍历后得到的序列是: ");

  Q=SETNULL(Q); 

  printf("%3c",ga->vexs[k]);

  visited[k]=TRUE;

  Q=ENQUEUE(Q,k);

  while(!EMPTY(Q))

  {

  i=DEQUEUE(Q);

  for(j=1;j<=n;j++)

  if((ga->arcs[i][j]==1)&&(!visited[j]))

    {

    printf("%3c",ga->vexs[j]);

     visited[j]=TRUE;

     Q=ENQUEUE(Q,j);

   }

 }

  printf("\n\n深度优先遍历后得到的序列是: ");

 

}

 

void BFSL(int k)

{

   int i;

   int visited[maxsize]={0};

   edgenode *p;

   Q=SETNULL(Q); 

   printf("\n广度优先遍历后得到的序列是: ");

   printf("%3c",gl[k].vertex);

   visited[k]=TRUE;

   Q=ENQUEUE(Q,k);

   while(!EMPTY(Q))

   {

  i=DEQUEUE(Q);

  p=gl[i].link;

  while(p!=NULL)

  {

   if(!visited[p->adjvex])

   {

    printf("%3c",gl[p->adjvex].vertex);

              visited[p->adjvex]=TRUE;

              Q=ENQUEUE(Q,p->adjvex);

   }

   p=p->next; 

  }

 }

   printf("\n\n深度优先遍历后得到的序列是: ");

}

 

void  DFS(int i)

{

   int j;

   static int visited[maxsize]={0};   

   printf("%3c",ga->vexs[i]);

   visited[i]=TRUE;

   for(j=1;j<=n;j++)

     if((ga->arcs[i][j]==1)&&(!visited[j]))

  DFS (j);

}

void DFSL(int k)

{

 int j;

 edgenode *p;

 static int visited[maxsize]={0}; 

 printf("%3c",gl[k].vertex);

 visited[k]=TRUE;

 p=gl[k].link; 

 while(p)

 {

  j=p->adjvex;

  if(!visited[j])

  DFSL(j);

  p=p->next;

 }

}

void main()

{

 int i,k;

 int ch;

 Q=malloc(sizeof(graph));

 ga=malloc(sizeof(graph));

 while(1)

 {

  printf("\n\n\n");

  printf("输入你的选择: ");

  scanf("%d",&ch);

  switch(ch)

  {

  case 1: CREATADJLIST();

    PRINTL();

    printf("想从第几号结点开始: ");

    scanf("%d",&k);

    BFSL(k);

    DFSL(k);break;

  case 2: ga=CREATGRAPH();

    PRINT();

    printf("想从第几号结点开始: ");

    scanf("%d",&i);

    BFS(i);

    DFS(i);break;

  case 3:exit (0);

  }

 

}

}

 

 

 

 

PS:下标从1开始的,输入矩阵的对应元素时要按你的顺序输入  输入表的顺序是要逆序输入 否则两者答案不匹配 因为表的选择要有大小要求的 你可以试一下.

 

 

数据结构题.假定无向图G有6个结点和9条边,.(1) 画出G的邻接距阵和邻接表(2) 根据邻接表从顶点3假定无向图G有6个结点和9条边,并依次输入这9条边为(0,1)(0,2)(0,4)(0,5)(1,2)(2,3)(2 设G为9阶无向图,每个结点度数不是5就是6,则G中至少有__个5度结点. 设无向图G中有n个结点,n-1条边,用归纳法于n,证明G是连通图则G中无回路. 若无向图G中有n个结点,n-1条边,则G为树.这个命题正确吗?为什么?求证明 关于数据结构中图的概念请问 在数据结构中图的一章中 什么是表头向量和边结点?它的原题是:对于一个具有n个顶点e条边的无向图的邻接表的表示,那么表头向量大小是(),邻接表的边结点 问一道数据结构 求无向图和邻接表的习题麻烦老师讲解一下 ,设无向图有6个节点,依次输入的9条边为(1,2)(1,3)(1,5)(1,6)(2,3)(3,4)(3,5)(4,5)(5,6).1.画出无向图G.2.画出G的邻 G是一个具有n个结点的无向连通图,证明G至少有n-1条边,并证明具有n-1条边的无向连通图是一棵树 图G无向连通图,G中有割点或桥,则无汉密尔顿图,怎么证明如题就是证明这条定理,不用图 请问lca001,为什么连结桥的两个结点必有一个结点是割点? 如何数电路中的支路与结点图a有6条支路4或3个结点,图b无支路无结点 数据结构 用C语言编程:求邻接矩阵存储结构的有向图G中各结点的出度 数据结构中马踏棋盘问题,求c程序考虑使用无向图来表示格子间的关系,以邻接表作为该无向图中结点与相邻8个结点的存储结构 在简单无向图G=中,如果V中的每个结点都与其余的结点邻接,则该图称为_____如果V有n个结点,那么他还是____度正则图 求大神 数据结构判断题1.空串与空白串是相同的2.具有12个结点的完全二叉树有5个度2的结点3.对于有向图,顶点的度分为入度和出度,入度是以该顶点为终点的入边数目,出度是以该顶点为起点 离散数学一道证明题证明:一个联通无向图G中的结点v是割点的充分条件是存在两个结点u和w,使得结点u和w的每一条路都通过v 数据结构中的图 无向和有向,怎样存入文件 编个程序 具体要求在下边 要用到数据结构的知识 请用C或PASCAL编写一个函数BIPARTITE判断一个连通无向图G是否是二部图,并分析程序的时间复杂度.设G用二维数组A来表示,大小为n*n(n为结点个 设G是有n个结点,n条边的简单连通图,且G中存在度数为3的结点.证明:G中至少存在有一个度数为1的结点. 设G是有n个结点n条边的简单连通图,且G中存在度数为3的结点,证明G中至少有一个度数为1的结点