第十二周笔记

学习笔记

邻接矩阵算法



增加顶点

void insertVex(AdjMatrix G,char e)//插入顶点 {
int i,j;
G->Vertex[G->vexnum++] = e;
i=DNlocation(
G,e);
j=DNlocation(*G,e);
int m=i,n=j;
for(j=0;jvexnum;j++)
{
G->arcs[m][j].adj=INFNITY;
}
for(i=0;ivexnum;i++)
{
G->arcs[i][n].adj=INFNITY;
} }

删除顶点

void deleteVex(AdjMatrix G,char vex)//删除顶点 {
int i,j;
int location;
location= DNlocation(
G,vex);

printf("顶点的下标是:%d\n",location);

//删除顶点集

for ( i = location+1; i < G->vexnum; i++)
{
G->Vertex[i-1] = G->Vertex[i];
}

//vex下面的上移

for (i = location+1; i < G->vexnum; i++)
{
for ( j = 0; j < G->vexnum; j++)
{
G->arcs[i-1][j] = G->arcs[i][j];
}
}

//vex右边的左移

for (i = location + 1; i < G->vexnum; i++)
{
for ( j = 0; j < G->vexnum; j++)
{
G->arcs[j][i-1] = G->arcs[j][i];
}
}

//清理垃圾数据(第vexNum行 和 第vexNum列)

int maxvexnum = G->vexnum;

int weight = INFNITY;/带权图,权重就是无穷/
// int weight = 0; /*不带权图,是 0 /
/

for (i = 0; i < maxvexnum; i++)
{
G->arcs[maxvexnum-1][i].adj = weight;

G->arcs[i][maxvexnum-1].adj = weight;
}

G->vexnum--;}

插入弧

int insertArc(AdjMatrix *G,char vex1,char vex2,int weight)//插入弧 {
//char v1,v2;

// v1=getch();

int I = DNlocation(*G,vex1);

// v2=getch();

int II = DNlocation(*G,vex2);

printf("要插入的弧所在的矩阵位置是:\n");

printf("%d,%d\n",I,II);

G->arcs[I][II].adj = weight;

// int weight;

/* if( (I!=II) && (I!=-1) && (II!=-1))
{
printf("请输入权重:\n");

scanf("%d",&weight);

return 1;
}*/

/* else if((I==II)&&((I!=-1)||(II!=-1)))
{
G->arcs[I][II].adj = INFNITY ;

return 1;
}

else if((I-1)||(II-1))*/

return 0;
}

删除弧

int deleteArc(AdjMatrix *G)//删除弧 {
char v1,v2;

v1=getch();

int I = DNlocation(*G,v1);

v2=getch();

int II = DNlocation(*G,v2);

printf("删除的弧的位置是:%d,%d\n",I,II);

if(I>-1 && Ivexnum && II>-1 && IIvexnum )
{
G->arcs[I][II].adj =INFNITY;
return 1;
}
else
return 0; }

小结

这周除了研究领接矩阵的算法外,还学习了邻接表的画法,邻接表和邻接矩阵的两种遍历方法,有广度遍历和深度遍历法,还有最小生成树的画法,以及连通图,强连通图的关系,区别,应用的公式等等,后续还会更新。

posted @ 2020-05-25 22:08  小鬼不当家  阅读(127)  评论(0)    收藏  举报