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

#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. BZOJ1642: [Usaco2007 Nov]Milking Time 挤奶时间

    1642: [Usaco2007 Nov]Milking Time 挤奶时间 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 525  Solved: 30 ...

  2. jps(JVM Process Status)

    功能   列出正在运行的虚拟机进程,并显示虚拟机执行主类(Main Class,main()函数所在类)的名称,以及这些进程的本地虚拟机的唯一ID(LVMID,Local Virtual Machin ...

  3. HDOJ(HDU) 2093 考试排名(Arrays.sort排序、类的应用)

    Problem Description C++编程考试使用的实时提交系统,具有即时获得成绩排名的特点.它的功能是怎么实现的呢? 我们做好了题目的解答,提交之后,要么"AC",要么错 ...

  4. NSTemporaryDirectory 临时文件

    唯一标识 : NSString*identifier=[[NSProcessInfoprocessInfo]globallyUniqueString]; 创建临时文件路径: NSString *fil ...

  5. MVC中各类文件

    sln:解决方案文件,为解决方案资源管理器提供显示管理文件的图形接口所需的信息. .csproj:项目文件,创建应用程序所需的引用.数据连接.文件夹和文件的信息. .aspx:Web 窗体页由两部分组 ...

  6. kindle paperwhite 使用说明

    calibre,eink必备转换软件. easypub,lucida制作的软件,支持txt to epub:txt to mobi,可以实现目录. 售后电话:400 817 0100 正常的设计格式转 ...

  7. 在sql语句中使用plsql变量

    示例代码如下: create or replace type ua_id_table is table of number; declare v_tab ua_id_table;begin v_tab ...

  8. 八、频繁模式挖掘Frequent Pattern Mining

    频繁模式挖掘(Frequent Pattern Mining): 频繁项集挖掘是通常是大规模数据分析的第一步,多年以来它都是数据挖掘领域的活跃研究主题.建议用户参考维基百科的association r ...

  9. Node.js初体验

    1.Node.js是什么 [1]Node是一个server端 JavaScript 解释器,但是真的以为JavaScript不错的同学学习Node就能轻松拿下,那么你就错了.总结:水深不深我还不知道, ...

  10. 轮播图--JS手写

    轮播图基本每个网站都会有,也有很多的JQuery插件可以用,这里是用JS代码写的. @{ Layout = null; } <!DOCTYPE html> <html> < ...