| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 526 人关注过本帖
标题:问一个关于有向图及无向图的问题?
取消只看楼主 加入收藏
hehewei
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2009-12-24
结帖率:90%
收藏
已结贴  问题点数:70 回复次数:0 
问一个关于有向图及无向图的问题?
#include <stdio.h>
#include <malloc.h>
#define VERTEX_MAX 30   /*最大顶点数*/
#define MAXSIZE 20

void creat_MGraph1();
void creat_MGraph2();
void CreateALGraph1();
void CreateALGraph2();
void printMG();
void printALG();


/*============以下为邻接矩阵的结构描述============*/
typedef char Vextype[3];  /*顶点类型*/
typedef struct
{
   Vextype vexs[VERTEX_MAX];   /*顶点信息*/
    int arcs[VERTEX_MAX][VERTEX_MAX];       /*邻接矩阵存储 */
    int vexnum,arcnum;    /*顶点数、边数*/
} MGraph;

/*=============以下为邻接表的结构描述============*/
typedef struct node       /*边结点定义*/
 {  int  adjvex;    /*邻接点域*/
    struct node  *next; /*指向下一个边结点的指针域*/
  }EdgeNode;

typedef struct vnode   /*表头结点定义*/
 { Vextype  vertex;   /*顶点信息*/
   EdgeNode   *firstedge;
  }VertexNode;

typedef struct  /*图的邻接表存储*/
 { VertexNode adjlist[VERTEX_MAX];
   int n,e;      /*顶点数和边数*/
 } ALGraph;

/*============以下为创建无向图的邻接矩阵过程=========*/
void creat_MGraph1(MGraph *g)
{   int i,j,k;      
    int n,m;         
    printf("请输入顶点数vex和边数arc:");    /*输入顶点数n和边数m*/
    scanf("%d,%d",&n,&m);
    g->vexnum=n;
    g->arcnum=m;
    printf("请输入顶点信息:");  /*输入顶点信息,如V0,V1等*/
    for (i=0;i<n;i++)
       scanf("%s",g->vexs[i]);  
    for (i=0;i<n;i++)        /*初始化邻接矩阵*/
      for (j=0;j<n;j++)
         g->arcs[i][j]=0;
    printf("请输入两个顶点间的边edge(i,j)\n");
    for (k=0;k<m;k++)        /*根据边的顶点对邻接矩阵进行赋值*/
    {
        scanf("%d,%d",&i,&j);
        g->arcs[i][j]=1;
        g->arcs[j][i]=1;
    }
}
/*============以下为创建有向图的邻接矩阵过程=========*/
void creat_MGraph2(MGraph *g)
{
    int i,j,k;      
    int n,m;         
    printf("请输入顶点数vex和边数arc:");    /*输入顶点数n和边数m*/
    scanf("%d,%d",&n,&m);
    g->vexnum=n;
    g->arcnum=m;
    printf("请输入顶点信息:");  /*输入顶点信息,如V0,V1等*/
    for (i=0;i<n;i++)
      scanf("%s",g->vexs[i]);  
    for (i=0;i<n;i++)        /*初始化邻接矩阵*/
      for (j=0;j<n;j++)
         g->arcs[i][j]=0;
    printf("请输入两个顶点间的边edge(i,j)\n");
    for (k=0;k<m;k++)        /*根据弧的顶点对邻接矩阵进行赋值*/
    {
        scanf("%d,%d",&i,&j);
        g->arcs[i][j]=1;
    }
    printf("创建成功!\n");
}
/*============以下为创建无向图的邻接表过程=========*/
void CreateALGraph1(ALGraph *G)
{  int i,j,k;
   EdgeNode * s,*t;
   printf("请输入顶点数vex和边数arc:");    /*输入顶点数n和边数m*/
   scanf("%d,%d",&(G->n),&(G->e));
   printf("请输入顶点信息:");   /*输入顶点信息,如V0,V1等*/
   for (i=0;i<G->n;i++)
   { scanf("%s",&(G->adjlist[i].vertex));
     G->adjlist[i].firstedge=NULL;        }
     printf("请输入两个顶点间的边edge(i,j)\n");  /*请输入边的信息*/
     for (k=0;k<G->e;k++) /*建立边表*/
      { scanf("%d,%d",&i,&j);
        s=(EdgeNode*)malloc(sizeof(EdgeNode));
       s->adjvex=j;
       t=(EdgeNode*)malloc(sizeof(EdgeNode));
       t->adjvex=i;
       s->next=G->adjlist[i].firstedge;  
         /*前插方法,将边结点s插入到头结点为G->adjlist[i]的单链表中*/
       G->adjlist[i].firstedge=s;
       t->next=G->adjlist[j].firstedge;   
       /*前插方法,将边结点t插入到头结点为G->adjlist[j]的单链表中*/
      G->adjlist[j].firstedge=t;
     }
  }/*CreateALGraph1*/
/*============以下为创建有向图的邻接表过程=========*/
void CreateALGraph2(ALGraph *G)
{ int i,j,k;
  EdgeNode * s;
  printf("请输入定点数vex和边数arc:");    /*输入顶点数n和边数m*/
  scanf("%d,%d",&(G->n),&(G->e));
  printf("请输入顶点信息:");  /*输入顶点信息,如V0,V1等*/
  for (i=0;i<G->n;i++)
   { scanf("%s",&(G->adjlist[i].vertex));
     G->adjlist[i].firstedge=NULL;
    }
  printf("请输入两个顶点间的弧edge<i,j>\n");  /*请输入弧的信息*/
  for (k=0;k<G->e;k++)     /*建立边表*/
  { scanf("%d,%d",&i,&j);
    s=(EdgeNode*)malloc(sizeof(EdgeNode));
    s->adjvex=j;
    s->next=G->adjlist[i].firstedge;    /*前插方法*/
    G->adjlist[i].firstedge=s;
   }
}/*CreateALGraph*/
void printMG(MGraph *g)    /*输出邻接矩阵*/
{
  int i,j;
  for (i=0;i<g->vexnum;i++)
  {for (j=0;j<g->vexnum;j++)
     printf(" %d",g->arcs[i][j]);
   printf("\n");
   }
}
void printALG(ALGraph *g)    /*输出邻接表*/
{
  int i;
  EdgeNode *p;
  for (i=0;i<g->n;i++)
 { printf("%s",g->adjlist[i].vertex);
   p=g->adjlist[i].firstedge;
   while (p)
   {
     printf("->%d",p->adjvex);
     p=p->next;
   }
   printf("\n");
   }
}


void main()
{   
    MGraph *L;
    ALGraph *A;
   
    creat_MGraph1(&L);
    CreateALGraph1(&L);
    printMG(&L);
   
    creat_MGraph2(&A);
   
    CreateALGraph2(&A);
   
    printALG(&A);
   
}

运行后出现
图片附件: 游客没有浏览图片的权限,请 登录注册
,这是什么原因呢?


搜索更多相关主题的帖子: include 
2011-01-04 23:04
快速回复:问一个关于有向图及无向图的问题?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.073293 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved