图数据集格式转换

1,比如图数据集格式如下:

12 24

1 2 

1 3

1 4

1 9

3 8

3 12

........

2,我想转换为如下这种格式

12 24

1 4 2 3 4 9

3 3 9 8 12

.......

3,转换思想:先读进来存储后再写出去

#pragma once
#include <vector>
using namespace std;
class Node
{
public:
	Node(void);
	Node(int x):vertex(x){};
	~Node(void);
public:
	int vertex;
	vector<int> vec;
};
#pragma once
#include <fstream>
#include <iostream>
#include "Node.h"
using namespace std;
class Graph
{
public:
	Graph(void);
	~Graph(void);
	void Readfile(Graph &g);
	void outtotxt(Graph g);
	void Readfile1(Graph &g);
public:
	int vernum;
	int arcnum;
	Node* AdjVector;
};
Graph,cpp内容如下:
#include "StdAfx.h"
#include "Graph.h"
#include <sstream>

Graph::Graph(void)
{
}

Graph::~Graph(void)
{
}
int count = 0;//记录转换后txt中的行数
void Graph::Readfile(Graph &g)
{
	ifstream infile("E:\\1234.txt");
	infile >> g.vernum >> g.arcnum;//这需要两次访存
	cout << g.vernum << ' ' << g.arcnum << endl;
	g.AdjVector = new Node[g.vernum + 1];//建立邻接vector
	int tail, head;
	for (int i = 1; i <= g.arcnum; i++)
	{
		infile >> tail >> head;
		g.AdjVector[tail].vertex = tail;
		g.AdjVector[tail].vec.push_back(head);
	}
	infile.close();
}
void Graph::outtotxt(Graph g)
{
	ofstream outfile("E:\\result1234.txt");
	outfile << g.vernum << ' ' << g.arcnum << endl;
	for (int i = 1; i <= g.vernum; i++)
	{
		if (!g.AdjVector[i].vec.empty())
		{
			outfile << g.AdjVector[i].vertex << ' ' << g.AdjVector[i].vec.size() << ' ';
			for (unsigned int j = 0; j < g.AdjVector[i].vec.size(); j++)
			{
				outfile << g.AdjVector[i].vec[j] << ' ';
			}
			count++;
			outfile << endl;
		}
	}
	outfile.close();
}
void Graph::Readfile1(Graph &g)
{
	ifstream infile("E:\\result1234.txt");
	string temp;
	stringstream ss;
	getline(infile, temp);
	ss << temp;
	ss >> g.vernum >> g.arcnum;
	cout << g.vernum << ' ' << g.arcnum << endl;
	g.AdjVector = new Node[g.vernum + 1];
	int tail = 1;
	unsigned int num = 0;
	for (int i = 0; i < count; i++)
	{
		ss.clear();//需要这个
		getline(infile, temp);
		ss << temp;
		ss >> tail >> num;
		//cout << tail << ' ' << num << endl;
		g.AdjVector[tail].vertex = tail;
		g.AdjVector[tail].vec.resize(num);
		for (int j = 0; j < num; j++)
		{
			ss >> g.AdjVector[tail].vec[j];
		}

	}
	infile.close();
}
#include "stdafx.h"
#include "Graph.h"
#include "Node.h"
#include <Windows.h>
#include <iostream>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	Graph G1,G2;
	double start1 = GetTickCount();
	G1.Readfile(G1);
	double end1 = GetTickCount();
    cout << "第一次读入时间为:" << end1 - start1 << "毫秒!" << endl;
	G1.outtotxt(G1);
	double start2 = GetTickCount();
	G2.Readfile1(G2);
	double end2 = GetTickCount();
	cout << "第二次读入时间为:" << end2 - start2 << "毫秒!" << endl;
	system("pause");
	return 0;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值