该程序用于找到网格中N个点的最小距离,选择其中一个点为集线器。如果一个人想要从一个点到另一个点,他必须通过枢纽点。程序得到了编译,但没有扫描输入。
#include<stdio.h>
#include<conio.h>
#include <math.h>
int abs1(int,int);
int dist(int,int,int,int);
main()
{
int x[200],y[2000],m,min,max1,max2,i,j,n,d[1000][1000];
scanf("%d",&n);
scanf("\n");
for(i=0;i<n;i++)
{
scanf("\n%d",&x[i]);
scanf("%d",&y[i]);
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(i==j)
continue;
d[i][j]=dist(x[i],x[j],y[i],y[j]);
}
}
min=10000;
for(i=0;i<n;i++)
{
max1=0;
max2=0;
for(j=0;j<n;j++)
{
if(i==j)
continue;
if(d[i][j]>max1)
max1=d[i][j];
else if(d[i][j]>max2)
max2=d[i][j];
}
m=max1+max2;
if(m<min)
min=m;
}
printf("\n%d",min);
getch();
}
int abs1(int p,int q)
{
if((p-q)<0)
return (q-p);
else
return (p-q);
}
int dist(int x1,int x2,int y1,int y2)
{
int e;
e=abs1(x1,x2)+abs1(y1,y2);
return(e);
}
答案 0 :(得分:0)
你正在定义两个大数组,即'd [1000] [1000]'缩小尺寸,你的错误就会消失。参考你也可以访问
http://www.daniweb.com/software-development/c/threads/314070/2d-arrays-problem
和
http://www.linuxquestions.org/questions/programming-9/c-array-size-limit-282519/