数据结构之图实现增删查改

    技术2025-03-01  39

    #include<stdio.h>  #define MAX 10typedef struct vertex{ int adjvex;  //顶点编号 int date;  //顶点数据}Vtype;

    typedef struct graph{ int n,e;  //n为实际顶点数,e为实际边数 int adges[MAX][MAX]; //顶点集合 Vtype vexs[MAX];  //边集合}AdjMatrix;     //图的邻接矩阵类型

    //创建图矩阵int CreateMatrix(AdjMatrix &g){ int a,b,c; printf("顶点数(n)和边数(e)(input like 1,2):"); scanf("%d,%d",&(g.n), &(g.e));  for(int x = 0;x < g.n; x++) {  g.vexs[x].date = x + 1;    g.vexs[x].adjvex = x; }  //为图的所有边赋值为0 for(int k = 0;k < g.n; k++)   {  for(int j = 0;j < g.n;j++)  {   g.adges[k][j] = 0;  } }  for(int i = 0;i < g.e; i++) {  printf("序列号为%d的边-->",i);     printf("起点号 终点号 权值");    //为图顶点到顶点之间输入权值  scanf("%d,%d,%d",&a,&b,&c);

      if(a < g.n && b < g.n && c >= 0) //判断输入的起点号,终点号,权值是否在范围内  {   g.adges[a][b] = c;  }  else  {   printf("Input error!");   return 0;  } }  return 1;}

    //将要删除的顶点到各顶点及各顶点到此顶点的权值设为0int DeleteNode(AdjMatrix &g,int n){ bool flag = false; for(int i = 0;i < g.n;i++) {  if(g.vexs[i].adjvex == n)  {   flag = true;   for(int j = 0;j < g.n ;j++)   {    for(int k = 0; k < g.n ;k++)    {     g.adges[n][k] = 0;      g.adges[j][n] = 0;    }   }  } } if(flag) {  return 1; }else {  return 0; } return 1;}

    //查找顶点,获取此顶点到所有顶点的权值int SelectNode(AdjMatrix g,int n){ bool flag = false; for(int i = 0;i < g.n;i++) {  if(g.vexs[i].adjvex == n)  {   flag = true;   for(int j = 0;j < g.n ;j++)   {    printf("顶点%d到顶点%d的权值为%d/n",n,j,g.adges[n][j]);   }  } } if(flag) {  return 1; }else {  return 0; }}void DispMatrix(AdjMatrix g){ for(int i = 0;i < g.n ;i++) {  for(int j = 0;j < g.n ; j++)  {   printf("%d /t",g.adges[i][j]);  }

      printf("/n"); }}

    int main(){ AdjMatrix Adj;

     CreateMatrix(Adj); DispMatrix(Adj);

     int n = SelectNode(Adj,1); if(n) {  printf("Find Success!/n"); }else {  printf("Find Failed!/n"); } int m = DeleteNode(Adj,1); if(m) {  printf("Delete Success!/n"); }else {  printf("Delete Failed!/n"); } return 0;}

    最新回复(0)