我正在尝试在C中使用变量替换。基本上我正在尝试 在图中找到最短路径b / w源节点和目标节点。在这里,我考虑了5个节点A,B,C,D和E.我已经在dist_a,dist_b等数组中存储了节点的距离(我也可以将距离存储在5x5矩阵中)。在for循环中,我正在检查目标节点的直接邻居(来自用户的输入)。但是,如何从 dstn 变量中替换该值,以便条件变为 dist_e (如果用户输入e作为目标)?
#include <stdio.h>
#include <conio.h>
void main()
{
int i,j;
char src, dstn, c;
int dist_a[5]={0,1,6,5,1000}; //taking 1000 as infinity means nodes aren't connected directly to each other
int dist_b[5]={1,0,1000,1,1000};
int dist_c[5]={6,1000,0,1,1};
int dist_d[5]={5,1,1,0,2};
int dist_e[5]={1000,1000,1,2,0};
clrscr();
printf("Enter source and destination\n");
scanf("%c %c",&src,&dstn);
printf("src = %c destn = %c",src,dstn);
for(i=0;i<=4;i++)
{
if(dist_dstn[i]!=0 && dist_dstn[i]!=1000) //The PROBLEM lies here. How do i substitute the value of dstn variable in the condition part.
{printf("%c updates to %d",dstn,i);}
}
getch();
}
我见过Variable Substitution in C,但我认为这不适用于此。
答案 0 :(得分:4)
C不是反射语言,因为可以在运行时检查变量名称。
但在你的情况下,为什么不使用2D数组:
int dist[][5]={
{0,1,6,5,1000},
{1,0,1000,1,1000},
{6,1000,0,1,1},
{5,1,1,0,2},
{1000,1000,1,2,0}
};
然后,您可以通过对此阵列进行适当的索引来选择所需的条带。将a
映射到0,将b
映射到1,等等。switch
块就足够了。 (不要假设使用带有c - 'a'
类型惯用语的ASCII作为字符c
。)
答案 1 :(得分:2)
问题在于您创建了5个单独的非相关数组。别这么做。
相反,您可以定义自定义类型:
typedef struct
{
int distance [5];
} dist_t;
然后声明一个这样类型的数组:
dist_t dist [5] =
{
{0,1,6,5,1000},
{1,0,1000,1,1000},
...
};
然后迭代该数组。