在多个阵列中执行多个搜索的最佳方式

时间:2013-01-25 16:56:47

标签: c arrays

考虑下面的表格,其中(目的地,路线)映射到Node

Destination_id(a)   route_id(b)   next_node(c)
  4                   1             6
  7                   1             9
  7                   2             8
  8                   4             4
  7                   3             2

的示例:

Given input (Destination_id, route_id) : (7,3)
Expected output : 2

Given input (Destination_id, route_id) : (4,1)
Expected output : 2

换句话说,表中的有效映射将是:

Input    Ouput
(4, 1) ->  6
(7, 1) ->  9
(7, 2) ->  8
(8, 4) ->  4
(7, 3) ->  2

我编写的代码,我正在获得完美的输出。有没有其他有效的方法来实现这个??

#include<stdio.h>


int main()
{
 int i,store;
 int a[5]={4,7,7,8,7};
 int b[5]={1,1,2,4,3};/// this will be always unique with respect to the search element of 'a' for eg.<7,1>, <7,2>
 int c[5]={6,9,8,4,2}; 
 int found_indices[5]; // array used to store indices of found entries..
 int count = 0; //n entries found;
 int ele_a, ele_b;
 printf("Enter the element to be search in array a\n");
 scanf("%d",&ele_a);
 printf("Enter the element to be search in array b\n");
 scanf("%d",&ele_b);
 // searching for the element
 for (i=0; i<5; i++)
 {    
     if (a[i]==ele_a)
     {
       found_indices[count ++] = i; // storing the index of found entry   

     }
  }
   if (count!=0) {
       for (i=0; i<count; i++)
       {
         if (b[found_indices[i]]==ele_b) 
         {
          store=found_indices[i];

         }
      }
   }
  printf("Element found %d ", c[store]);   
}

2 个答案:

答案 0 :(得分:0)

试试这个:

for (i = 0; i < 5; i++) {
    if (a[i] == ele_a && ele_b == b[i]) {
        printf("Element found %d ", c[i]);
        break;
    }
}

如果映射表很大,那么散列表就是最佳选择。

答案 1 :(得分:0)

您的程序可能会因某些其他输入而崩溃。因为store未初始化为零。在这种情况下,考虑if (b[found_indices[i]]==ele_b)这种情况永远不会成功,最后在printf陈述中,c [store]会导致崩溃。

访问c语句本身内的if数组。

int c_value = 0;
....

if (b[found_indices[i]]==ele_b) 
{
   c_value=c[found_indices[i]];
}
....

if (!c_value)printf("Element found %d ", c_value);

注意:我希望您不要将0作为c数组中的元素之一。