以下は、プリムのアルゴリズムを書こうとした途中のコードです。
#include <iostream>
using namespace std;
#define MAXN 100000
#define min(a, b) ((a) < (b) ? (a) : (b))
#define abs(a) ((a) < 0 ? - (a) : (a))
#define BIGNUM 10000000000
int main(void)
{
int N;
static long x[MAXN];
static long y[MAXN];
static long d[MAXN][MAXN];
int flag[MAXN] = {0};
cin >> N;
for(int i=0; i<N; i++) {
cin >> x[i] >> y[i];
}
for(int i=0; i<N; i++) {
for(int j=0; j<N; j++) {
d[i][j] = min(abs(x[i]-x[j]), abs(y[i]-y[j]));
}
}
flag[0] = 1;
long long ans = 0;
for(int i=1; i<N; i++) {
long long mintemp=BIGNUM;
long long minindex;
for(int j=0; j<N; j++) {
if(flag[j] == 1) {
if(mintemp > d[i][j]) {
mintemp = d[i][j];
minindex = j;
}
ans += mintemp;
flag[minindex] = 1;
}
}
}
cout << ans << endl;
return 0;
}
SEGVするところをgdbで確認したところ、 このように出ます。このような現象は、巨大配列を静的に確保しようとした時によく発生するような気がします。staticをつけて解決できる時もあるのですが、解決できないことのほうが多いです。何かご存じの方がいらっしゃったら、助言いただけるとありがたいです。