#include<stdio.h>
#define MAX 10
typedef 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;
}
//将要删除的顶点到各顶点及各顶点到此顶点的权值设为0
int 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;
}