主题:如何把图转化为矩阵?加分!!!
沙漠笨鸟
[专家分:220] 发布于 2005-09-30 12:58:00
如何把图转化为矩阵?谢谢!有加分!!!
回复列表 (共6个回复)
沙发
FancyMouse [专家分:13680] 发布于 2005-09-30 16:39:00
假设n个顶点,设计一个n*n的矩阵,第i行第j列代表从i到j的有向线段的权值。如果没有线段的话赋值为0(或者其他不可能为权值的值)
板凳
沙漠笨鸟 [专家分:220] 发布于 2005-09-30 17:11:00
能具体点吗?
3 楼
binetyy [专家分:330] 发布于 2005-10-01 12:19:00
你要的是算法还是文字描述
4 楼
沙漠笨鸟 [专家分:220] 发布于 2005-10-04 23:44:00
当然是算法!!!
5 楼
michard9 [专家分:70] 发布于 2005-10-05 16:32:00
FancyMouse大人,这个……您能不能举个例子详细一点地说明?或者再具体一点的文字说明,“假设n个顶点,设计一个n*n的矩阵,第i行第j列代表从i到j的有向线段的权值。如果没有线段的话赋值为0(或者其他不可能为权值的值) ”这样的解释太简单了啊……
6 楼
binetyy [专家分:330] 发布于 2005-10-05 20:13:00
图的存储结构--用邻接矩阵表示的算法
建立邻接矩阵的算法
#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);
}
我来回复