从文件打印图形



所以基本上我有一个文件,他的线组成了一个图,其中第一行是顶点和弧的数量,其余的是连接。问题是,在我的图形打印功能中,由于某种原因,它不会打印任何内容。

程序:

#include <iostream>
#include <vector>
#include <cstdlib>
#include <cstring>
#include <cstdio>
using namespace std;

void AlgInit(char str[],vector<vector<int>> graph)
{
int m,n,tokens;
FILE* entry;
entry = fopen(str,"r");

tokens = fscanf(entrada,"%d %d",&n,&m);

graph = vector<vector<int>>(n,vector<int>());
for(int i=0; i<n;i++)
{
int u,v;
fscanf(entry,"%d %d",&u,&v);
graph[u-1].push_back(v-1);
}
fclose(entrada);
}
void printGraph(vector<vector<int>> g)
{
for(int i=0;i<g.size();i++)
{
for(int j=0;j<g[i].size();j++)
{
printf("%d %d",i+1,g[i][j]+1);
}  
}
}
int main(int argc,char** argv)
{
vector<vector<int>> graph1;
AlgInit(argv[1],graph1);
printf("%sn",argv[1]);
printGraph(graph1);
exit(0);
}

这里的问题是函数声明的签名,它通过值而不是通过引用来调用graph。需要后一个来获得对象的可修改版本,而不仅仅是本地副本。

由于您的版本是按值调用的,所以图形对象(初始化为空向量(不会被AlgInit修改,因此打印方法没有任何作用。

因此,函数应该是这样的,&在中起作用

void AlgInit(char str[],vector<vector<int>> &graph)

正如评论中所建议的,进一步阅读:What';通过引用传递和通过值传递之间的区别是什么?

最新更新