我只是想将文件中的数据读入矢量。如图所示,我正在尝试读取的文件包含第一个数字(n),即节点数量。之后,我读了n个重量。最后,我从邻接矩阵得到了连接。当我编译我的代码时,它停止工作。
int main()
{
ifstream inFile;
string tline;
inFile.open("Problem.dat_50_50_0");
if(!inFile)
cout << "OPSS" << endl;
inFile >> tline;
inFile >> n;
for(int i = 0; i < 2 * (n + 1); i++)
inFile >> tline;
vector<vector<int> > matrix(n, vector<int>(n));
vector<list<int> > adj(n);
vector<int> weight(n);
vector<int> degree(n);
vector<string> color(n, white);
for(int i = 0; i < n; i++)
{
inFile >> weight[i];
weight.push_back(weight[i]);
}
inFile >> tline;
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
{
inFile >> matrix[i][j];
if(i == j)
matrix[i][j] = 0;
if(matrix[i][j] == 1)
adj[i].push_back(j);
}
}
我正在尝试打开该文件以读取第一行,将此数字放入n
,然后将push_back
放入第一行后n
个数字的向量中(它代表图中所示的重量)。读完体重后,我们去矩阵找邻居。如果matrix[i][j] == 1
,我们会将j
的值放入邻接向量中。
例如,根据图片,adj向量将如下:
0 -> 1, 2
1 -> 0, 2, 3
2 -> 0, 1
3 -> 1
答案 0 :(得分:1)
为什么不写这样的数据?:public class MazePanel extends JPanel {
private Maze maze = new Maze(); //so I can paint the maze
private MazeModel model;
private Player p;
private Enemy e = new Enemy();
private Entity ent;
public MazePanel(MazeModel model){ //constructor
p = new Player(model);
p.setPlayerStart(50, 50); //sets the player's starting coordinates
setPreferredSize(new Dimension(500, 500)); //map size
setBackground(Color.DARK_GRAY); //ground color
}
public void paintComponent(Graphics g){
super.paintComponent(g);
maze.paintMaze(g); //creates the walls
e.paintImg(ent, g);
p.paintImg(ent, g);
}
}
拆分和解析更容易..
或使用4;12,2365,85;6,11,12,8;
列表..
希望这会有所帮助..我最了解它的方式。
答案 1 :(得分:0)
这个区块看起来不对:
for(int i =0; i < n ; i++){
inFile>> weight[i];
weight.push_back(weight[i]);
}
您正在从inFile
获取该号码并将其放入weight[i]
,然后在下一行中再次push_back
相同的值,但之后您将覆盖该值下一次迭代(因为i
同时增加了)。这意味着,如果来自文件的数字为1 2 3 4
,您将在每次迭代结束时得到这些结果:1 1
,1 2 2
,1 2 3 3
,{{ 1}}。仅1 2 3 4 4
就够了。
然后,我不认为这是阻碍你的问题,但是......
inFile>> weight[i];
如果您无法读取该文件,则不应只打印“OPSS”,应退出或抛出异常。无论如何,你不能只是继续,因为其余的代码需要文件存在。