2014-02-22 49 views
1

该程序用于查找网格中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); 
} 
+2

删除'scanf(“\ n”);' – herohuyongtao

+0

相关:[大二维数组给出分段错误](http://stackoverflow.com/questions/851122/large-2d-array-gives-segmentation-fault) – WhozCraig

回答

0

要定义两个大阵即 'd [1000] [1000]' 降低尺寸和你的错误将是gone.for参考您还可以参观

http://www.daniweb.com/software-development/c/threads/314070/2d-arrays-problem 

http://www.linuxquestions.org/questions/programming-9/c-array-size-limit-282519/