C语言中的邻居查找程序代码

C语言中的邻居查找程序代码,c,for-loop,multidimensional-array,neighbours,C,For Loop,Multidimensional Array,Neighbours,指令是编写一个程序,使用二维数组查找比所有相邻元素都大的元素 For example if my input is: 1 2 11 13 5 6 7 6 9 The output would be: 11, 13, 9 bool neighbourCheck(int array[N+2][N+2], int i, int j) { int l, m; for(l=i-1; l<i+1; l++) {

指令是编写一个程序,使用二维数组查找比所有相邻元素都大的元素

For example if my input is:

1   2   11
13  5   6
7   6   9

The output would be: 11, 13, 9
bool neighbourCheck(int array[N+2][N+2], int i, int j)                      
{
   int l, m;
   for(l=i-1; l<i+1; l++)
   {
            for(m=j-1; m<j-1; m++)
            {
                     if(array[l][m]>=array[i][j])
                     {
                                    return(FALSE);                            
                     }
                     return(TRUE);
            }
   }
}  
出于某种原因,尽管它根本不显示数字。有人能帮我更正代码吗

代码如下:

#include <stdio.h>                                          
#include "genlib.h"
#include "simpio.h"

#define N 3                                                 

bool neighbourCheck(int array[N+2][N+2], int i, int j);     
void getArray(int array[N+2][N+2]);

main()                                                  
{
      int array[N+2][N+2], i, j;

      printf("This program will ask you to enter nine integers of an aray.\n");
      getArray(array);
      for (i=1; i<N+1; i++)
      {
                for(j=1; j<N+1; j++)
                {
                         if(neighbourCheck(array, i, j)==TRUE)
                         {
                                        printf("%d\t", array[i][j]);            
                         }        
                }
      }
      getchar();
}

void getArray(int array[N+2][N+2])
{
      int i, j;

      for(j=0;j<=N+1;j++)
      {
                i=0;
                array[i][j]=-1;
                i=4;
                array[i][j]=-1;                   
      }
      for(i=1;i<N+1;i++)
      {
                j=0;
                array[i][j]=-1;
                j=4;
                array[i][j]=-1;                 
      }
      for(i=1;i<N+1;i++)
      {
                for(j=1;j<4;j++)
                {
                                printf("\nEnter a positive integer: ");
                                array[i][j]=GetInteger();                
                }
      }   
}

bool neighbourCheck(int array[N+2][N+2], int i, int j)                      
{
     int l, m;

     for(l=i-1; l<i+1; l++)
     {
                for(m=j-1; m<j-1; m++)
                {
                         if(array[l][m]>=array[i][j])
                         {
                                        return(FALSE);                            
                         }
                         return(TRUE);
                }
     }
}  
#包括
#包括“genlib.h”
#包括“simpio.h”
#定义n3
布尔邻域检查(int数组[N+2][N+2],int i,int j);
void getArray(int数组[N+2][N+2]);
main()
{
int数组[N+2][N+2],i,j;
printf(“此程序将要求您输入一个数组的九个整数。\n”);
getArray(数组);

对于邻接检查功能中的(i=1;i),以下代码

for(l=i-1; l<i+1; l++)
{
  for(m=j-1; m<j-1; m++)
  {
    if(array[l][m]>=array[i][j])
    {
      return(FALSE);                            
    }
    return(TRUE);
  }
}
它将始终为
TRUE
,您将返回
FALSE

此外,进一步看,
返回TRUE
似乎并不是它应该返回的位置。您应该在测试所有可能的组合后才返回TRUE,而不仅仅是第一个组合。尽管这让您惊讶于没有打印数字

针对该评论,一种可能的方法是以下替代方法:

for(l=i-1; l<i+1; l++)
{
  for(m=j-1; m<j+1; m++)
  {
    if (l == i && m == j)
      continue;

    if(array[l][m]>=array[i][j])
    {
      return(FALSE);                            
    }
  }
}
return(TRUE);

我想你不是在检查所有的邻居

For example if my input is:

1   2   11
13  5   6
7   6   9

The output would be: 11, 13, 9
bool neighbourCheck(int array[N+2][N+2], int i, int j)                      
{
   int l, m;
   for(l=i-1; l<i+1; l++)
   {
            for(m=j-1; m<j-1; m++)
            {
                     if(array[l][m]>=array[i][j])
                     {
                                    return(FALSE);                            
                     }
                     return(TRUE);
            }
   }
}  
bool-neighbourCheck(int数组[N+2][N+2],int i,int j)
{
int l,m;
for(l=i-1;lfor(m=j-1;m

在上述针对各种j值的声明中,条件始终为false,因此它不能进入循环。

您必须更改零件

for(l=i-1; l<i+1; l++)
{
        for(m=j-1; m<j-1; m++)

用于(l=i-1;lso那么我能做些什么来改变它呢?但是如果我这样做了,程序不会在返回TRUE时打印所有的数字吗?不会,因为如果它发现有任何相等或更大的邻域,它会首先返回
FALSE
。如果它将自己与所有邻域进行比较并发现它们都相同,它才会返回
TRUE
你能更具体地回答你的问题吗?我怎样才能让程序返回正确的值,因为现在它只打印每个数字。现在我使用你的完整代码,它工作了!:)我的代码的另一部分肯定有问题:/噢,别介意,我只是没有正确阅读您的函数……对不起,但非常感谢。如果邻居具有相同的值,则您的解决方案是不正确的。
for(l=i-1; l<i+1; l++)
{
        for(m=j-1; m<j-1; m++)
for(l=i-1;l<=i+1;l++)
{
        for(m=j-1;m<=j-1;m++)