回 帖 发 新 帖 刷新版面

主题:如何把图转化为矩阵?加分!!!

如何把图转化为矩阵?谢谢!有加分!!!

回复列表 (共6个回复)

沙发

假设n个顶点,设计一个n*n的矩阵,第i行第j列代表从i到j的有向线段的权值。如果没有线段的话赋值为0(或者其他不可能为权值的值)

板凳

能具体点吗?

3 楼

你要的是算法还是文字描述

4 楼

当然是算法!!!

5 楼

FancyMouse大人,这个……您能不能举个例子详细一点地说明?或者再具体一点的文字说明,“假设n个顶点,设计一个n*n的矩阵,第i行第j列代表从i到j的有向线段的权值。如果没有线段的话赋值为0(或者其他不可能为权值的值) ”这样的解释太简单了啊……

6 楼

图的存储结构--用邻接矩阵表示的算法
建立邻接矩阵的算法

#define MAX  N   /*定义最大顶点个数N为某一正整数 */

typedef struct

{ datatype  vaxs[MAX+1];  /* 一维数组存放各顶点的值 */

  int arcs[MAX+1][MAX+1]; /* 定义二维数组存放邻接矩阵 */

  int vexnum,arcnum;      /* 图中实际顶点数和边(弧)数 */

}mgraph;

void creatgraph(g)

mgraph g;

{ int i,j,k,vl,v2;

int LocateVex( );    /* 具体内容见下面算法 */

scanf("%d,%d",&g->vexnum,&g->arcnum);/* 输入图g的顶点数和边数*/

for (i=1;i<=g->vexnum;i++)

scanf(“%d”,&g->vexs[i]);   /* 输入各顶点值,设为int型 */

for (i=1;i<=g->vexnum;i++)

for(j=l;j<=g->vexnum;j++) g->arcs[i][j]=0; /*初始化邻接矩阵 */

for(k=l;k<=g->arcnum;k++)

{ scanf("%d,%d",&vl,&v2);

/* 依次输入每条边关联的两个顶点的值:若顶点值不是int型,*/

/* 则应设置成其他的格式字串 */

i=LocateVex(g,v1);j=LocateVex(g,v2);

/ *确定两个顶点在图中的位置序号分别为i,j */

if (i!=0 && j!=0)    /* 如果输入的顶点在图中,则对邻接矩阵中 */

        { g->arcs[i][j]=l; /* 的相应位置及其对称位置的元素赋值为l*/

g-arcs[i][j]=1;

         }

}

int LocateVex(g,v)

mgraph *g;

int v;

{ int i;

for (i=1;g->vexs[i]!=v && i<=g->vexnum; i++); /* 查顶点v的下标i */

if (i>g->vexnum) return(0);

else return(i);

}

我来回复

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