過年太無聊就解程式題目,但有一題真的讓我百思不得其解,題目如下:
https://zerojudge.tw/ShowProblem?problemid=c178
這題的第 13、14、15 組測資都會顯示 「記憶體區段錯誤!
Segmentation fault (core dumped)」,但我很納悶到底哪裡會存取不該存取的地方🤔
程式碼如下
#include<stdio.h>
#include<stdlib.h>
#include<limits.h>
#define min(a, b)(a > b ? b : a)
void travel();
int **map,**dp,n;
main()
{
scanf("%d", &n);
map = (int **)calloc(n, sizeof(int *));
dp = (int **)calloc(n, sizeof(int *));
for(int i = 0 ; i < n ; i++)
{
map[i] = (int *)calloc(n, sizeof(int));
dp[i] = (int *)calloc((1 << (n - 1)), sizeof(int));
}
int distance;
for(int i = 0 ; i < n ; i++)
{
for(int j = 0 ; j < n ; j++)
{
scanf("%d", &distance);
map[i][j] = distance;
}
dp[i][0] = map[i][0];
}
travel();
printf("%d\n", dp[0][(1 << (n - 1)) - 1]);
free(map);
free(dp);
}
void travel()
{
for(int j = 1 ; j < 1 << (n - 1) ; j++)
{
for(int i = 0 ; i < n ; i++)
{
dp[i][j] = INT_MAX;
if(j >> (i - 1) & 1)
{
continue;
}
for(int k = 1 ; k < n ; k++)
{
if(!(j >> (k - 1) & 1))
{
continue;
}
dp[i][j] = min(dp[i][j], map[i][k] + dp[k][j ^ (1 << (k - 1))]);
}
}
}
}
請問問題是出在哪呢🥺