【发布时间】:2012-03-03 11:49:22
【问题描述】:
我有以下深度优先搜索的递归实现。最后,数组 pre 显示访问几个顶点的顺序。我想为非常大的图表运行它。在本例中:n = 2097152,m = 6291408。G 表示为邻接表。
static int cnt, pre[2097152];
static link t;
void dfsRAdjazenz(Graph G, Edge e)
{
int w = e.w
pre[w] = cnt++;
for (t = G->adj[w]; t != NULL; t = t->next) {
if (pre[t->v] == -1) {
Edge e = {w, t->v};
dfsRAdjazenz(G, e);
}
}
}
int main (int argc, const char * argv[])
{
cnt=0;
int v;
for (v = 0; v < 2097152; v++) {
pre[v] = -1;
}
Edge e = {1,1};
dfsRAdjazenz(G, e);
return 0;
}
问题是我总是用完内存-> 分段错误,尽管确实有足够的可用内存。它仅适用于大约 100 万个节点。
编辑:数据结构:
typedef struct node *link;
struct node {
int v;
link next;
};
struct graph {
int V;
int E;
link *adj;
};
typedef struct {
int v;
int w;
} Edge;
typedef struct graph *Graph;
【问题讨论】:
-
你为什么要对我们隐藏最重要的代码,即
Graph和Edge类型的定义?这是猜谜游戏吗?答案可能是“您使用错误的数据结构”,但这正是您没有发布的信息。 -
n和m代表什么? -
抱歉,我更新了它。 n = 节点,m = 边
-
你确定你的内存用完了 - 是消息还是你只是得到一个分段错误。
标签: c memory segmentation-fault