gpt4 book ai didi

c - 空指针赋值错误!

转载 作者:行者123 更新时间:2023-11-30 14:24:34 28 4
gpt4 key购买 nike

以下是 Dijkstra 最短路径算法的代码。该代码在小输入上运行良好,但我需要它来处理大小为 200 的二维数组。所以我使用了动态内存分配。但它仍然给出了空指针赋值错误。谁能帮我找到一种读取大尺寸二维数组的替代方法。

#include<stdio.h>
#include<conio.h>
#include<string.h>


void dij(int n,int v,int **c,int *d)
{
int i,u,count,w,f[300];
int min;

for(i=1;i<=n;i++)
{
f[i]=0;d[i]=c[v][i];
}

f[v]=1,d[v]=1;

count=2;

while(count<=n)
{
min=1000000;
for(w=1;w<=n;w++)
if((d[w]<min)&&!f[w])
{
min=d[w];u=w;
}
f[u]=1;
count++;

for(w=1;w<=n;w++)
if(((d[u]+c[u][w])<d[w])&&!f[w])
d[w]=d[u]+c[u][w];
}

}


int main()
{
int v=1,n=4,i,j,k,len;
char str[20];
int **c,*d,val;

d=(int*)malloc(n*sizeof(int));
c=(int**)malloc(n*sizeof(int*));
for(i=1;i<=n;i++)
c[i]=(int*)malloc(n*sizeof(int));

for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
c[i][j]=0;
for(k=0;k<=n;k++)
{
do
{
scanf("%s",&str);
len=strlen(str);
if(len>3)
{
sscanf(str,"%d,%d",&j,&val);
c[k][j]=val;
}
else break;
}
while(1);
}

for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
if(c[i][j]==0)
c[i][j]=1000000;
}

printf("enter the source\n");

scanf("%d",&v);

dij(n,v,c,d);

printf("shortest path from\n");

for(i=1;i<=n;i++)
if(i!=v)
printf("%d -> %d=%d\n",v,i,d[i]);
getch();
}

最佳答案

for(i=1;i<=n;i++)

数组索引从零开始。

关于c - 空指针赋值错误!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11584104/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com