Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 蚁群算法求解TSP问题_C_Ant_Mathematical Optimization_Traveling Salesman - Fatal编程技术网

C 蚁群算法求解TSP问题

C 蚁群算法求解TSP问题,c,ant,mathematical-optimization,traveling-salesman,C,Ant,Mathematical Optimization,Traveling Salesman,我正在用C语言中的蚁群算法研究TSP问题。 我认为我的实现是正确的,但我的程序不起作用。 我知道我的代码内存有问题,因为当我运行程序时,控制台会写“内核转储” 我使用gdb查找错误,当我编写调试命令时,我看到类似的情况: Program received signal SIGSEGV, Segmentation fault. 0x08049691 in odleglosc (miastoA=1668848019, miastoB=1062464331, graf=0x804d440) at tr

我正在用C语言中的蚁群算法研究TSP问题。 我认为我的实现是正确的,但我的程序不起作用。 我知道我的代码内存有问题,因为当我运行程序时,控制台会写“内核转储” 我使用gdb查找错误,当我编写调试命令时,我看到类似的情况:

Program received signal SIGSEGV, Segmentation fault.
0x08049691 in odleglosc (miastoA=1668848019, miastoB=1062464331, graf=0x804d440) at trail.c:34
34      return graf[miastoA][miastoB];
(gdb) bt
0  0x08049691 in odleglosc (miastoA=1668848019, miastoB=1062464331, graf=0x804d440) at trail.c:34
1  0x080496f1 in Length (sciezka3=0x804f5a0, graf=0x804d440, size=22) at trail.c:42
2  0x0804919d in updateFeromon (feromon=0x804f380, mrow=0x804e8a0, graf=0x804d440, parowanie=0, 10000000000000001, iloscFeromonu=2, miasta=22, mrowki=4) at pheromon.c:40
3  0x080489e3 in main (argc=1, argv=0xbffff0f4) at main.c:55
c中的UpdateFeromon从trail.c调用一个长度函数,接下来这个函数也从trail.c调用odleglosc。 miasto和miasto的范围是从0到21。 我不知道哪个函数会改变我的值(miastoA和miastoB)以及如何修复它


这是我的代码链接

这是一个复杂的代码,很难理解用我不会说的语言编写的复杂代码。无论如何,我试图检查代码,发现一个地方看起来可疑。在函数inicjalizujMrowki()中,您似乎覆盖了下面第二个for循环中的mrow[]值:

for(i=0; i<miasta; i++)
{
    mrow[i]=(int*)malloc(sizeof(int)*miasta);
}
for(j=0; j<mrowki;j++)
{
    int start =0;
    mrow[j]= losowaSciezka(start, miasta);
}

编辑:我参与的太多了。我认为,与其查看代码并试图找出问题,不如花些时间学习如何使用调试器。这会有很大帮助。

好吧,米亚斯塔是许多城市,莫洛基是许多蚂蚁。在第一个循环中,我想为2d数组分配一个内存。(mrow[蚂蚁数量][城市数量]。在第二个循环中,我为我的蚂蚁初始化了一条随机路径。类似于1(蚂蚁):(路径)2,5,7,1,20,…22元素对不起,城市数量错了,是的,不是21;)现在我想我在第一个循环中为mrow分配内存时犯了一个错误。那么我怎样才能为整数**mrow?诸如此类的东西分配内存呢?int*mrow;mrow=malloc(numberOfAnts*sizeof(int));对于(i=0;IPL,见下面更新的答案。请不要编辑我的答案:)下面是你写的:好吧,我写了这样的东西:int**Inicjalizujmrrowki(int-mrowki,int-miasta){int-i;int-j;int*mrow;mrow=malloc(sizeof(int)*mrowki);for(i=0;iants 1[1,12,17,3,…,21,18]length=2040,00 ants 2……但现在是这样显示的:ants 1[0,0,0,0…,0,0]……我不知道为什么当我改变函数中分配内存的实现时InIcAlizeUJMrowki只显示0,但之前显示的是随机轨迹。顺便说一句,函数Losowasiezka返回一个随机蚂蚁轨迹数组。
int **mrow;
**mrow = malloc(num_rows);
for (0 to num_rows-1) {
    *mrow = malloc(num_columns);
}