图的邻接矩阵表示

来源:互联网 发布:淘宝抢货神器 编辑:程序博客网 时间:2024/05/16 09:37
# include <stdio.h># include <malloc.h># include <memory.h># define MAX 10//最大顶点数 typedef struct{char vexs[MAX];//顶点向量 int arcs[MAX][MAX];//邻接矩阵 int vexnum,arcnum;//图的当前点数和弧数 }MGRAPH,* mgraph;void init_mgraph(mgraph &g)//初始化图 {int i;g = (mgraph)malloc(sizeof(MGRAPH));g->vexnum = 0;g->arcnum = 0;memset(g->vexs,0,sizeof(char)*MAX);for (i=0;i<MAX;++i){for (int j=0;j<MAX;++j){g->arcs[i][j] = 0;}}}void add_vexs(mgraph &g)//增加顶点 {printf ("请输入顶点的个数\n");scanf ("%d",&(g->vexnum));printf ("请输入顶点的值\n");for (int i=0; i<g->vexnum; ++i){scanf ("%d",&(g->vexs[i]));}}void add_arcs(mgraph &g)//增加边 {printf ("请输入边的个数\n");scanf ("%d",&(g->arcnum));char ch1,ch2;int row,col;for (int i=0;i<g->arcnum;++i){scanf ("%c %c",&ch1,&ch2);for (int j=0; j<g->vexnum; ++j){if (g->vexs[j] == ch1)row = j;if (g->vexs[j] == ch2)col = j;}g->arcs[row][col] = 1;//有向带权图只需把1改成weight g->arcs[col][row] = 1;//无向图加上此行 }}void creat_mgraph(mgraph &g)//创建图 {add_vexs(g);//增加顶点 add_arcs(g);//增加边 }void print_mgraph(mgraph &g)//打印图 {int i,j;for (i=0;i<g->vexnum;++i)scanf ("%c",&(g->vexs[i]));printf ("\n");for (i=0;i<g->vexnum;++i){printf ("%c ",g->vexs[i]);for (j=0;j<g->vexnum;++j)printf ("%d ",g->arcs[i][j]);printf ("\n");}}void delete_vex(mgraph &g,char ch)//删除顶点 {int row,i,j;for (i=0;i<g->vexnum;++i){if (g->vexs[i] == ch)row = i;}int arcs = 0;//记录删除顶点的弧数 for (i=0;i<g->vexnum;++i){if (g->arcs[row][i] == 1)arcs++;}for (i=0;i<g->vexnum;++i){for (j=row;j<g->vexnum-1;++j)g->arcs[i][j] = g->arcs[i][j+1];//把删除顶点右边的数据左移 g->arcs[i][j+1] = 0;}for (i=row;i<g->vexnum-1;++i){for (j=0;j<g->vexnum;++j){g->arcs[i][j] = g->arcs[i+1][j];//把删除顶点下面的数据上移 }g->arcs[i+1][j] = 0;}for (i=row;i<g->vexnum;++i)//把顶点数组中右边的数据左移 g->vexs[i] = g->vexs[i+1];g->vexnum = g->vexnum-1; //顶点个数减1 g->arcnum = g->arcnum-arcs;//总弧数减去要删除顶点的弧数 }int main (void){mgraph g;init_mgraph(g);//初始化图 creat_mgraph(g);//创建图 print_mgraph(g);//打印图 char ch;scanf ("%c",&ch);delete_vex(g,ch);//删除顶点 printf ("%d ",g->arcnum);printf ("%d\n",g->vexnum);print_mgraph(g);return 0;} 

0 0
原创粉丝点击