#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;}