回 帖 发 新 帖 刷新版面

主题:关于数据结构,新人求教问题!

已知无向图G描述如下:
G=(V,E)
V={V1,V2,V3,V4,V5}
E={(V1,V2),(V1,V4),(V2,V4),(V3,V4),(V2,V5),(V3,V4),(V3,V5)}
(1)画出G的图示;
(2)然后给出G的邻接矩阵和邻接表;
(3)写出每个顶点的度。

回复列表 (共2个回复)

沙发

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
/*  领接矩阵的头文件 */
#define FINITY 5000 /* 代表无穷大 */
#define m 20  /*最大的顶点数 */

typedef char vertextype ;  /*顶点值类型 */
typedef int edgetype; /* 权值类型 */
typedef struct
{
    vertextype vexs[m];   /*顶点值信息 */
    edgetype  edges[m][m];    /*邻接矩阵 */
    int n,e;  /*顶点总数与边数 */
}mgraph;  /*邻接矩阵表示的图类型 */

/*图的有向网络邻接矩阵创建的算法 */
void creatmgraph(mgraph *g)
{
    int i,j,k,w;

    printf("Please input the n and e:\n");
    scanf("%d%d",&g->n,&g->e);  /* 输入图的顶点数与边数 */
    getchar();

    printf("Please input vexs:\n");
    for(i=0;i<g->n;i++)         /* 输入图的顶点值 */
    {
       g->vexs[i]=getchar();
    }

    for(i=0;i<g->n;i++)   /*对邻接矩阵进行初始化 */
       for(j=0;j<g->n;j++)
          if(i==j)   g->edges[i][j]=0;
          else
               g->edges[i][j]=FINITY;

     printf("Please input the edges:\n");
     for(k=0;k<g->e;k++)
     {
        scanf("%d%d%d",&i,&j,&w);
        g->edges[i][j]=w;
     }

}
/* 对邻接矩阵打印*/
void  print(mgraph  *g)
{
    int i,j;

    for(i=0;i<g->n;i++)
    {
        printf("%c",g->vexs[i]);
    }
    printf("\n");

    for(i=0;i<g->n;i++)
    {
        for(j=0;j<g->n;j++)
            printf("%8d",g->edges[i][j]);

            printf("\n");
    }
}
/*图的有向网络邻接矩阵创建的算法 */
void creatmgraph1(mgraph *g,char s[])
{
    int i,j,k,w;
    FILE  *fp;

    fp=fopen(s,"r");

    fscanf(fp,"%d%d",&g->n,&g->e);  /* 输入图的顶点数与边数 */



    for(i=0;i<g->n;i++)         /* 输入图的顶点值 */
    {
       fscanf(fp,"%c",&g->vexs[i]);
    }

    for(i=0;i<g->n;i++)   /*对邻接矩阵进行初始化 */
       for(j=0;j<g->n;j++)
          if(i==j)   g->edges[i][j]=0;
          else
               g->edges[i][j]=FINITY;


     for(k=0;k<g->e;k++)
     {
        fscanf(fp,"%d%d%d",&i,&j,&w);
        g->edges[i][j]=w;
     }
     fclose(fp);
}
/* 对邻接矩阵打印*/
void  print1(mgraph  *g,char s[])
{
    int i,j;
    FILE *fp;

    fp=fopen(s,"w");
    for(i=0;i<g->n;i++)
    {
        printf("%c",g->vexs[i]);
        fprintf(fp,"%c",g->vexs[i]);
    }
    printf("\n");
    fprintf(fp,"\n");

    for(i=0;i<g->n;i++)
    {
        for(j=0;j<g->n;j++)
         {
            printf("%8d",g->edges[i][j]);
            fprintf(fp,"%8d",g->edges[i][j]);
          }
            printf("\n");
            fprintf(fp,"\n");
    }
    fclose(fp);
}
void main()
{
    mgraph g;
    creatmgraph1(&g,"mgraph.txt");
    print1(&g,"wmgraph.txt");

  
} 这个可以输出矩阵,呵呵

板凳

楼上的朋友,这种题还是不要回答的好
这一看就是来求作业的,你这样热心会害了他的
让他发段代码出来,帮忙Debug我还是愿意的

我来回复

您尚未登录,请登录后再回复。点此登录或注册