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

#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. 2014-08-22 关于Response、Request等对象在cs文件中的使用

    今天是在吾索实习的第33天.已经有一段时间没写过博客了,今天突然想起个值得分享的东西,所以又华丽地回归了. 废话不多说了,直奔主题.我们会发现,在我们在cs文件中,直接使用Response.Reque ...

  2. hdu-1010 dfs+剪枝

    思路: 剪枝的思路参考博客:http://www.cnblogs.com/zibuyu/archive/2012/08/17/2644396.html  在其基础之上有所改进 题意可以给抽象成给出一个 ...

  3. [转载]监控 Linux 性能的 18 个命令行工具

    转自:http://www.kuqin.com/shuoit/20140219/338066.html 对于系统和网络管理员来说每天监控和调试Linux系统的性能问题是一项繁重的工作.在IT领域作为一 ...

  4. 关于在SLES11, RHEL6, OEL6 and UEK2 Kernels使用hugepages的告警

    ALERT: Disable Transparent HugePages on SLES11, RHEL6, OEL6 and UEK2 Kernels (Doc ID 1557478.1) Modi ...

  5. 路由器的nat模式、路由模式和全模式

    NAT模式.此模式下,由局域网向广域网发送的数据包默认经过NAT转换,但路由器对所有源地址与局域网接口不在同一网段的数据包均不进行处理.例如,路由器LAN口IP设置为192.168.1.1,子网掩码为 ...

  6. python 查看文件夹权限组和用OS模块操作文件夹

    @建议操作server服务器文件夹时可以映射网络驱动盘 import win32securityimport ntsecuritycon as con FILENAME = r'D:\tmp\acc_ ...

  7. springMVC之本地化和国际化

    spring框架的大部分都支持国际化,就像springMVC一样.DispatcherServlet使你能够动态的通过客户端的本地语言进行配置.这是通过LocaleResolver完成的.   当一个 ...

  8. nagios 实现Mysql 主从同步状态的监控

    一.系统环境 主机名 IP nagios 192.168.15.111 mysql_s 192.168.15.21 二.操作步骤 2.1 mysql_s端的配置 2.1.1 编写check_mysql ...

  9. [RxJS] Creation operators: from, fromArray, fromPromise

    The of() operator essentially converted a list of arguments to an Observable. Since arrays are often ...

  10. 再次记录老K站点的工作策略

    股市开盘了. 据说今天是多空决战的日子. 7月17日.三大期指交割. 打开大盘,看着指数一会上升,一会跳水.好不欢乐.当然,今天我是来记录我的老K,关于老K的下一步. 近期每天傍晚的时候.都会去江边散 ...