50分求c语言 数据结构问题 跪求挑战者和高手啊 我是崩溃了 救命啊

麻烦各位如果不会不要留言...免得留言多了高手看不到这道题目了题目比较难而且比较烦麻烦想挑战的高手编写下了我一定把所有积分都给你...谢谢啦我快崩溃了啊不会呀题目英文的我... 麻烦各位如果不会不要留言...免得留言多了高手看不到这道题目了
题目比较难 而且比较烦 麻烦想挑战的高手编写下了 我一定把所有积分都给你...谢谢啦 我快崩溃了啊 不会呀
题目英文的 我翻译成中文了(已经很不容易了 呃)
一个地区的村庄有N个,每两个村庄之间只有一条路联通,输入某3个村庄a b c 然后判断从a村到b村是否会经过c村,编写程序模拟这个事件。
例:
输入 N (范围1到500000)
比如:3 (代表这地方有3个村子)
再输入N-1行数 每行输入两个数代表村庄名字
比如:0 1
1 2(表明0村和1村有条路 1村和2村有条路)
接下来输入M (范围1到500000)
比如:3 (表示接下来要分别测试三个村庄)
最后输入M行数 每行3个 前两个数代表两村庄 然后判断第三个村庄是否在两村庄之间的某村庄。
比如:
0 2 1
1 2 0
1 2 1

最后输出为:yes(从0村到2村要过1村)
no(从1村到2村要过0村)
yes(从1村到2村要过1村)
谢谢谢谢啦 高人们啊
希望能有个程序什么的 自己编比较费力啊
展开
 我来答 举报
希声和寡
2009-03-18 · TA获得超过2.6万个赞
知道大有可为答主
回答量:6437
采纳率:0%
帮助的人:3611万
展开全部
给你,已经做好了,在VC6.0上编译运行确认:
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
int main()
{
int n,a,b,c;
int i,j;
int **num;

int m;
int **num2;

int flag=0;

while(1)
{
printf("please input n(1~500000): ");
fflush(stdin);
scanf("%d",&n);

if(n>=1&&n<=500000) break;
else printf("Error input!\n");
}

num=(int **)malloc((n-1)*sizeof(int *));
for(i=0;i<n-1;i++)
num[i] = (int*) malloc(2*sizeof(int));

printf("请输入%d组数据: \n",n-1);
for(i=0;i<n-1;i++)
{
fflush(stdin);
scanf("%d %d",&a,&b);
num[i][0]=a;
num[i][1]=b;
}

while(1)
{
printf("please input m(1~500000): ");
fflush(stdin);
scanf("%d",&m);

if(m>=1&&m<=500000) break;
else printf("Error input!\n");
}

num2=(int **)malloc(m*sizeof(int *));
for(i=0;i<m;i++)
num2[i] = (int*) malloc(3*sizeof(int));

printf("请输入%d组数据: \n",m);
for(i=0;i<m;i++)
{
fflush(stdin);
scanf("%d %d %d",&a,&b,&c);
num2[i][0]=a;
num2[i][1]=b;
num2[i][2]=c;
}

for(i=0;i<m;i++)
{
flag=0;

for(j=0;j<n-1;j++)
{
if(num[j][0]==num2[i][0])
{
if(num[j][0]==num2[i][2])
{
flag=1;
break;
}
else if(num[j][1]==num2[i][2])
{
flag=1;
break;
}
else if(num[j][1]==num2[i][1]) break;
else
{
num2[i][0]=num[j][1];
j=-1;
continue;
}
}
}
if(flag) printf("yes\n");
else printf("no\n");
}

getch();
return 1;
}
hanwt139
2009-03-18 · TA获得超过843个赞
知道小有建树答主
回答量:1144
采纳率:100%
帮助的人:712万
展开全部
如果我没理解错,你的意思应该是:每个村子只有2条路,1条进,1条出。
1条绳上的N个蚂蚱。
那么有2种方法:数组和链表。
用数组的话,要求执行“再输入N-1行数 每行输入两个数代表村庄名字 ”操作时,按照首尾相连的方法输入。这样依次存入数组。
接收键盘输入的3个村庄的数字,找出a,b,c对应的数组下标(这个很容易,只要用for循环,轮询数组元素,可以轻松得到下标)。
只要判断 c的下标值是否在a,b下标值的中间就可以了。
链表方法类似。
抢首赞 已赞过 已踩过<
你对这个回答的评价是?
评论 举报 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式