作者Silwez (Pion)
看板Programming
标题[问题] Graph:Adjacency List
时间Tue Jan 19 19:31:53 2016
初次在本版发文
小弟我现在正在赶最後一份程式作业
其中需要用到Graph的概念
这个Graph是一个旗盘方格的样子
每个点都跟前後左右连接
而我打算用adjacency list的方式储存这张graph
以下是我的程式码:
01//Construct the graph
02 vector<int> List[grid^2];
03 /*Relation between nodes and List :(grid = 4)
04 3| 12 13 14 15 <- List order
05 2| 8 9 10 11
06 1| 4 5 6 7
07 0| 0 1 2 3
08 -----------
09 0 1 2 3 <- coordinate
10 */
11 //Construct by using the adjacency list
12 for(int i = 0;i < grid^2;i++)
13 {
14 List[i].clear();
15 if(i >= grid)
16 List[i].push_back(i-grid);
17 if(i <= grid^2 - grid - 1)
18 List[i].push_back(i+grid);
19 if(i % grid != 0)
20 List[i].push_back(i-1);
21 if(i % grid != grid - 1)
22 List[i].push_back(i+1);
23 for(int k = 0;k < List[i].size();k++)
24 cout << List[i][k] << " ";//print
25 cout << endl;
26 }
执行(grid=4)的时候出了很奇怪的问题:
当i跑到8的时候就会坏掉,跳出SIGSEGV的讯息
以前的经验告诉我这个讯息应该是i跑出List的范围之外
但List有16格(0~15),i=8不应该会溢出
除错时,前面i=0~7时cout的数字都是正常
到i=8的16行开始出错
我实在是看不出有什麽问题,希望能请各位高手看一下
--
1F:推 ef9527: 体验版到骷髅王登场超有趣的,当初玩过直接预购了。07/24 09:20
2F:→ ef9527: 正式版出来熬夜玩到後面就…07/24 09:20
3F:推 sillymon: 干楼上跟我被拐的经历一模一样07/24 09:47
4F:推 Nitricacid: 干楼上跟楼楼上跟我被拐的经历一样07/24 13:17
5F:推 o07608: 干楼上跟楼楼上跟楼楼楼上我被拐的经历一模一样07/24 14:54
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.112.247.194
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Programming/M.1453203147.A.09C.html
6F:推 LPH66: grid^2 不是平方, 要平方直接乘以自己即可 123.195.39.85 01/19 21:16
感谢
其实我几秒钟前也发现这个问题XD
其他软体写久了回来写C++还是有点不习惯的说
※ 编辑: Silwez (140.112.247.194), 01/19/2016 21:31:13