c语言实现一个邻接矩阵(动态数组)+(默写版)

#include
#include
//第一步骤,边的定义
struct Enode
{
 int v1,v2;
 int weight;
};
typedef struct Enode* Edge;

//第二步骤,图的定义
struct Gnode
{
  int Nv,Ne;
  int** GL;
  //定义一个二维数组
};
typedef struct Gnode* Graph;

//第三步骤,图的初始化
Graph CreateGraph(int Nv)
{
 Graph G;
 G=(Graph)malloc(sizeof(struct Gnode));
 G->Nv=Nv;
 G->Ne=0;
 //动态分配一个二维数组
 G->GL=(int **)malloc(sizeof(int*)*Nv);
 int i,j,k;
 for(i=0;iGL[i]=(int *)malloc(sizeof(int)*Nv);
 }
 for(j=0;jGL[k][j]=0;
    }
	 return G;
}

//第四步骤,单边插入
void InsertGraph(Graph G,Edge E)
{
	G->GL[(E->v1)-1][(E->v2)-1]=E->weight;
	//如果是无向图,还需以下的步骤
	G->GL[(E->v2)-1][(E->v1)-1]=E->weight;
	printf("插入成功\n");
}

//第五步骤,建造一个完整的图

Graph BuildGraph(int Nv,int Ne)
{
	int i;
 Graph G;//--------------------这步绑在起
 G=CreateGraph(Nv);//----------两是定一的
 if(Ne!=0)
 {
   printf("正在读取边节点数据\n");
   printf("请将有边存在的两个节点数据以及权重在下面一一列出,首位节点间以空格隔开:\n");
   for(i=0;iv1),&(E->v2),&(E->weight));
	printf("输入成功\n");
    InsertGraph(G,E);
	free(E);
   }
 }
 printf("创建成功!!!\n");
 return G;
}

int main()
{
 int Nv,Ne; 
 printf("请输入您要定义的图的节点数量;\n");
 scanf("%d",&Nv);
 printf("请输入您要定义节点的边的数量:\n");
 scanf("%d",&Ne);
 printf("正在创建一个图\n");
 Graph G;
 G=BuildGraph(Nv,Ne);


return 0;
}

节点编号从1开始,还有。
例如只有两个节点,则编号必须为0,1。
不可以按自己想法编号1,2,要按节点数量编号0,1。

你可能感兴趣的:(c语言的数据结构)