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

#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. linux中的cd ..和cd -命令有什么区别?

    cd ..是返回上一层目录, cd -是返回到上一次的工作目录,如果当前目录是/执行cd /usr/local再执行cd ..就是到 /usr而执行cd -就是到/

  2. 元素水平垂直居中(transform,margin,table-cell,jQuery)

    1.水平居中 .div{ margin:0 auto; (或者 margin:auto;) width:500px; height:300px; } 2.使用margin水平垂直居中 方式一: .di ...

  3. SherlockActivity也可以用依赖注入的方法:

    场景:     一个Activity必须继承RoboActivity才可以使用依赖注入. 若一个Activity已经继承了别的Activity了.比如SherlockActivity 如何才能使用依赖 ...

  4. gcc编译命令

    g++ demo.cpp -o demo.exe

  5. Be Sociable, Share!

  6. Linux 上使用 Gmail SMTP 服务器发送邮件通知

    导读 假定你想配置一个 Linux 应用,用于从你的服务器或桌面客户端发送邮件信息.邮件信息可能是邮件简报.状态更新(如 Cachet).监控警报(如 Monit).磁盘时间(如 RAID mdadm ...

  7. Hat’s Words hdu-1247

    就是查找这个单词能不能有两个单词组成,简单的字典树题目 ////////////////////////////////////////////////////////////// #include& ...

  8. MyBatis(1):MyBatis入门

    MyBatis是什么 MyBatis是什么,MyBatis的jar包中有它的官方文档,文档是这么描述MyBatis的: MyBatis is a first class persistence fra ...

  9. org.apache.struts.chain.commands.InvalidPathException: No action config found for the specified url.

    No action config found for the specified url url路径下找不到action,原因是stuts-config.xml文件配置错误. demo的项目文件如下: ...

  10. 负载均衡之DNS轮询

    大多数域名注册商都支持对统一主机添加多条A记录,这就是DNS轮询,DNS服务器将解析请求按照A记录的顺序,随机分配到不同的IP上,这样就完成了简单的负载均衡.下图的例子是:有3台联通服务器.3台电信服 ...