图的邻接矩阵表示及其建立(无向图)

#include <stdio.h>

#include <stdlib.h>

typedef char VertexType;                //顶点类型应由用户定义

typedef int EdgeType;                   //边上的权值类型应由用户定义

#define MAXVEX  100             //最大顶点数,应由用户定义

#define INFINITY    65535       //用65535来代表无穷大

#define DEBUG

typedef struct

{

VertexType vexs[MAXVEX];            //顶点表

EdgeType   arc[MAXVEX][MAXVEX];         //邻接矩阵,可看作边

int numVertexes, numEdges;      //图中当前的顶点数和边数

}Graph;

//定位

int locates(Graph *g, char ch)

{

int i = 0;

for(i = 0; i < g->numVertexes; i++)

{

if(g->vexs[i] == ch)

{

break;

}

}

if(i >= g->numVertexes)

{

return -1;

}

return i;

}

//建立一个无向网图的邻接矩阵表示

void CreateGraph(Graph *g)

{

int i, j, k, w;

printf("输入顶点数和边数:\n");

scanf("%d %d", &(g->numVertexes), &(g->numEdges));

#ifdef DEBUG

printf("%d %d\n", g->numVertexes, g->numEdges);

#endif

for(i = 0; i < g->numVertexes; i++)

{

g->vexs[i] = getchar();

while(g->vexs[i] == '\n')

{

g->vexs[i] = getchar();

}

}

#ifdef DEBUG

for(i = 0; i < g->numVertexes; i++)

{

printf("%c ", g->vexs[i]);

}

printf("\n");

#endif

for(i = 0; i < g->numEdges; i++)

{

for(j = 0; j < g->numEdges; j++)

{

g->arc[i][j] = INFINITY; //邻接矩阵初始化

}

}

for(k = 0; k < g->numEdges; k++)

{

char p, q;

printf("输入边(vi,vj)上的顶点i,顶点j和权值:\n");

p = getchar();

while(p == '\n')

{

p = getchar();

}

q = getchar();

while(q == '\n')

{

q = getchar();

}

scanf("%d", &w);

int m = -1;

int n = -1;

m = locates(g, p);

n = locates(g, q);

if(n == -1 || m == -1)

{

fprintf(stderr, "there is no this vertex.\n");

return;

}

//getchar();

g->arc[m][n] = w;

g->arc[n][m] = g->arc[m][n];  //因为是无向图,矩阵对称

}

}

//打印图

void printGraph(Graph g)

{

int i, j;

for(i = 0; i < g.numVertexes; i++)

{

for(j = 0; j < g.numVertexes; j++)

{

printf("%d  ", g.arc[i][j]);

}

printf("\n");

}

}

int main(int argc, char **argv)

{

Graph g;

//邻接矩阵创建图

CreateGraph(&g);

printGraph(g);

return 0;

}

图的建立——邻接矩阵表示(C语言+VC6.0平台)的更多相关文章

  1. 图的建立——邻接表表示(C语言+VC6.0平台)

    图是一种重要而且相对复杂的数据结构,在实际编程中非常有用.邻接表是图的主要表示形式之一,是一种链接表表示方法. #include<stdio.h> #include<stdlib.h ...

  2. 常用排序算法之——快速排序(C语言+VC6.0平台)

    经典排序算法中快速排序具有较好的效率,但其实现思路相对较难理解. #include<stdio.h> int partition(int num[],int low,int high) / ...

  3. 常用排序算法之——选择排序(C语言+VC6.0平台)

    选择排序是另一种经典排序算法,核心思想是:在一趟找最小(大)数的过程中,先假设待排数据中的第一个数据即为最小(大)数据,然后循环将其他数据与该数据比较,每次比较时若小于该数据则让新数据成为最小(大)数 ...

  4. 解决&quot;VC6.0的ClassView里不能显示类或成员变量&quot;问题

    VC6.0是微软1998年公布的,是一款非常经典的编辑器.然而它有几个非经常见的bug,比方, .cpp文件打不开,智能提示出现异常.这里介绍"VC6.0的ClassView里不能显示类或成 ...

  5. 基于visual Studio2013解决算法导论之054图的邻接矩阵表示

     题目 图的邻接矩阵表示 解决代码及点评 // 图的邻接矩阵表示.cpp : 定义控制台应用程序的入口点. // #include <iostream> #include <l ...

  6. 图的建立(邻接矩阵)+深度优先遍历+广度优先遍历+Prim算法构造最小生成树(Java语言描述)

    主要参考资料:数据结构(C语言版)严蔚敏   ,http://blog.chinaunix.net/uid-25324849-id-2182922.html   代码测试通过. package 图的建 ...

  7. 数据结构代码整理(线性表,栈,队列,串,二叉树,图的建立和遍历stl,最小生成树prim算法)。。持续更新中。。。

    //归并排序递归方法实现 #include <iostream> #include <cstdio> using namespace std; #define maxn 100 ...

  8. VC6.0建立控制台程序实现PDA应用

    作者:iamlaosong 由于须要,又写起了文本界面的程序,以便PDA通过telnet连上运行. 假设是Linuxserver的话.这是非常easy的事,但是用户server是windows ser ...

  9. 图->存储结构->邻接多重表

    文字描述 邻接多重表是无向图的另一种链式存储结构. 虽然邻接表是无向图的一种很有效的存储结构,在邻接表中容易求得顶点和边的各种信息. 但是,在邻接表中每一条边(vi,vj)有两个结点,分别在第i个和第 ...

随机推荐

  1. BZOJ1984: 月下“毛景树”

    1984: 月下“毛景树” Time Limit: 20 Sec  Memory Limit: 64 MBSubmit: 713  Solved: 245[Submit][Status] Descri ...

  2. 解决Chrome无法加载Shockwave Flash

    Shockwave Flash 是 Adobe Flash Player下的一个小插件,你可以在Google商店中找到并下载. 通常来讲,Shckwave Flash会在安装Flash Player的 ...

  3. js编写验证码

    这是一个简单的js编写的验证码,自己已经亲自验证,没有问题了 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN ...

  4. linux enable命令学习

    shell命令用来启动或关闭shell内建命令. 通过type命令查看可以知道,enable命令本身也是一个shell内建命令. sh-# type enable enable is a shell ...

  5. 【Python排序搜索基本算法】之Prim算法

    Prim算法是实现最简单的最小生成树(MST)算法,适合于稠密图.要实现Prim算法,我们主要关注的是增量的变化,也就是从每个非树顶点到树顶点的最短距离,使得最后生成一棵包括所有顶点的树,并且这棵树的 ...

  6. MD5方法代码(生成小写的md5) C#版本

    public string GetMD5Str(string input) { // Use input string to calculate MD5 hash MD5 md5 = System.S ...

  7. ngnix 一 入门指南

    翻译自:ngnix--Beginner Guide ##ngnix入门指南 本指南给出了nginx的基本介绍,并介绍了可以使用它的完成一些简单任务. 它假定nginx已经安装在读者的机器上. 如果不是 ...

  8. 如何在Ubuntu 12.04 Server 中安装图形用户界面

    root@ubuntu:~# gedit /etc/environment root@ubuntu:~# gedit /etc/profile ---------------------------- ...

  9. 《C专家变成》之二

    第五章 一.对链接的思考 目标文件并不能直接执行,它首先需要载入到链接器.链接器确认main函数为初始进入点(程序开始执行的地方),把符号引用绑定到内存地址,把所有的目标文件集中在一起,再加上库文件, ...

  10. 渲染器 Shader BitmapShader

    渲染模式: tileX tileY:The tiling mode for x/y to draw the bitmap in.   在位图上 X/Y 方向 瓦工/花砖/瓷砖 模式 CLAMP  :如 ...