今天我们首先要解决的问题是使用C++进行外部文件夹的读取。
我们在实现这些算法的过程中,用到的图的存储结构(目前)只是涉及到两种 邻接链表存储结构和邻接矩阵存储结构。其中用到较多的还是邻接链表的形式。
在我们进行图的各种操作之前,我们必须先要创建一个图。因为后期我们小组要对每个人实现的算法进行比较,我们决定使用统一的图(具有相同的结点个数和相同的边),因此引出了我遇到的第一个问题:如何将txt文件里面的数据读取出来。
首先我们先来分析txt文档里面存储的数据结构:
6506
0 1
0 34
0 678
...
txt文档的第一行数字为图中结点的个数,此后每一行体表一条边,第一个int数字为边的起点,后一个数字为边的终点。我们可以发现,数据的存储结构相对于之前写IL算法时的数据集结构要简单的多,所以相应的操作也就少了,拿uniprot150m.txt数据集来说整个文件有293MB的大小,我们使用getline()方法就可以完成,时间消耗个人感觉比较多,读入文件且创建图的部分代码如下:
void Graph::creat_Linklist_Direction(){
ifstream read("E:/uniprot150m.txt");
string tem;
getline(read,tem);
istringstream iss(tem);//利用istream 读取string类型并转为int
iss >> vex_num;
cout<<"结点的个数:"<<vex_num<<endl;
createVertexArry();
int start,end;
int weight=0;
while(!read.eof()){
getline(read,tem);
if (tem=="#")
{
continue;
}
if (tem!="")
{//对读入每行的内容进行分割
int pos=tem.find(" ",0);