昨天有点事停更了一天,非常抱歉!继续遗传算法可视化项目,之前文章没看的或者今天才关注的点历史消息或者这里:
遗传算法可视化项目(1):概述
遗传算法可视化项目(2):获取信息
好了,该进入今天的工作了,创建图的数据结构,图的定义(主要是二元组和三元组两种定义)和存储结构多了去了,这里也就不一一介绍了,我认为图的定义也就是用来描述物件与物件之间关系,我用的是邻接矩阵的存储结构,图的存储结构当然还有邻接表,十字链表……
先打开VS2017(开始菜单里面找),然后文件→新建→项目,然后点击visualC++ → Windows控制台应用程序,修改名称和项目路径,其余默认,点击确定等待片刻,等待完成之后在那个给你生成的.cpp文件(这个cpp文件以后用不到(因为最终要运行的是Python程序,而不是C程序),但是如果想要调试函数的可以在这里面的main函数里面调用)最上面写上#include<stdlib.h>然后在main函数里面写这两行代码:
system("pause");
return 0;
接着就是在右边的解决方案资源管理器中找到并右击头文件,添加→新建项,点击头文件,修改一下文件名,然后确定,我这里头文件就叫Graph.h了,Graph.h第一行应该会有一个#pragma once的预处理,表示让Graph.h只被编译一次,不会因为重复的包含而去重复的编译,不要删掉!在第二行开始写自己的代码。首先,把之前生成的那个文本文件(海南省所有镇的经纬度.txt)复制到现在的项目中,和Graph.h一个目录就行,然后用VS编写Graph.h。首先定义图的存储结构邻接矩阵,代码如下:
#define ROW 106表示图中有106个结点(视自己情况而定,我以前在学校就爬出来106个点,然后回到家重新爬一次发现没有106个点,我也不清楚是为什么,具体怎么爬看之前的推送。这个不用管,那个文本文件(海南省所有镇的经纬度.txt)有多少行ROW就是多少),最后我还定义了一个Graph类型的全局变量,为什么要定义这个全局变量是因为和Python交互时使用,如果局部变量函数一结束就直接回收了,我以后还要把图的数据传给Python。定义完事之后就是把图创建出来了,定义函数如下(在函数上面需要加一些头文件和宏定义
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#define MAX 10
首先是在create函数体里面定义变量并初始化,代码如下:
然后就是打开文件(海南省所有镇的经纬度.txt),把文件内容读到内存中,以后方便处理,代码如下:
我在这里就是把文件内容存放到char*类型的str的变量中,然后就是字符串分割,代码如下:
这样就把str整个字符串分成了ROW行3列的char*类型的二维数组,二维数组是变量strArray,然后利用atof函数把经纬度从char*类型转变为double类型,存入图中,代码如下:
节点已经初始化完毕,然后就是初始化边,代码如下:
初始状态节点与节点并没有来连通,以后我会把最短路径连上,MAX是一个无穷大的数,我在这里定义成了10,为什么我会定义成10明天再说,今天差不多就到这里,最后不要忘了关闭文件释放资源!关闭文件释放资源的代码如下:
目前为止,create函数讲完了,今天的内容——创建图讲完了我还会持续更新,文章最后附上项目地址:https://github.com/3480430977/DataVisualizationOfGA
最后欢迎大家扫码关注