![](https://iknow-base.cdn.bcebos.com/lxb/notice.png)
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村)
谢谢谢谢啦 高人们啊
希望能有个程序什么的 自己编比较费力啊 展开
题目比较难 而且比较烦 麻烦想挑战的高手编写下了 我一定把所有积分都给你...谢谢啦 我快崩溃了啊 不会呀
题目英文的 我翻译成中文了(已经很不容易了 呃)
一个地区的村庄有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村)
谢谢谢谢啦 高人们啊
希望能有个程序什么的 自己编比较费力啊 展开
2个回答
展开全部
给你,已经做好了,在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;
}
#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;
}
展开全部
如果我没理解错,你的意思应该是:每个村子只有2条路,1条进,1条出。
1条绳上的N个蚂蚱。
那么有2种方法:数组和链表。
用数组的话,要求执行“再输入N-1行数 每行输入两个数代表村庄名字 ”操作时,按照首尾相连的方法输入。这样依次存入数组。
接收键盘输入的3个村庄的数字,找出a,b,c对应的数组下标(这个很容易,只要用for循环,轮询数组元素,可以轻松得到下标)。
只要判断 c的下标值是否在a,b下标值的中间就可以了。
链表方法类似。
1条绳上的N个蚂蚱。
那么有2种方法:数组和链表。
用数组的话,要求执行“再输入N-1行数 每行输入两个数代表村庄名字 ”操作时,按照首尾相连的方法输入。这样依次存入数组。
接收键盘输入的3个村庄的数字,找出a,b,c对应的数组下标(这个很容易,只要用for循环,轮询数组元素,可以轻松得到下标)。
只要判断 c的下标值是否在a,b下标值的中间就可以了。
链表方法类似。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询