关于‘pascal.’的一道题的程序解释6.找树根和孩子(find.pas)Description 给定一棵树,输出树的根root,孩子最多的结点max以及他的孩子.Input 第一行:n(结点个数),m(边数). 以下m行;每行两个结

来源:学生作业帮助网 编辑:六六作业网 时间:2024/11/27 19:18:39
关于‘pascal.’的一道题的程序解释6.找树根和孩子(find.pas)Description给定一棵树,输出树的根root,孩子最多的结点max以及他的孩子.Input第一行:n(结点个数),m

关于‘pascal.’的一道题的程序解释6.找树根和孩子(find.pas)Description 给定一棵树,输出树的根root,孩子最多的结点max以及他的孩子.Input 第一行:n(结点个数),m(边数). 以下m行;每行两个结
关于‘pascal.’的一道题的程序解释
6.找树根和孩子(find.pas)
Description
给定一棵树,输出树的根root,孩子最多的结点max以及他的孩子.
Input
第一行:n(结点个数),m(边数).
以下m行;每行两个结点x和y,表示y是x的孩子.
Output
第一行:树根:root.
第二行:孩子最多的结点max.
第三行:max的孩子.
var
a,b,c,d:array[0..100] of integer;
n,m,max,i,j:integer;
t,x:integer;
begin
assign(input,'find.in');reset(input);
assign(output,'find.out');rewrite(output);
readln(n,m);
for i:=1 to m do
begin
readln(a[i],b[i]);
d[b[i]]:=1;
end;
for i:=1 to n do if d[i]=0 then begin writeln(i); break end;
for i:=1 to n do
inc(c[a[i]]);
max:=c[1];
for i:=1 to n do
if c[i]>max then max:=c[i];
for i:=1 to n do
if c[i]=max then begin writeln(i); max:=i; break; end;
for i:=1 to n do
if a[i]=max then write(b[i],' ');
close(input);
close(output);
end.
看不懂.求高手解释.详细点...谢谢啦.~~~

关于‘pascal.’的一道题的程序解释6.找树根和孩子(find.pas)Description 给定一棵树,输出树的根root,孩子最多的结点max以及他的孩子.Input 第一行:n(结点个数),m(边数). 以下m行;每行两个结
回答你的问题纯粹是因为这代码太烂了,还出来教人的话纯属误人子弟.
首先,c数组没有赋初值0,程序不会得到正确结果
第二,计算孩子节点数和读取节点关系对是可在一个循环内的.
第三,max变量的意义在前后代码中发生了变化,这个习惯不好.
第四,源代码n,m不分,犯了很多错误.
代码解释如下:(已修正)
var
{a、b记录树节点关系对,a记录父节点b记录子节点,c是节点的孩子数,d是记录节点有无父节点1表示有0表示没有}
a,b,c,d:array[0..100] of integer;
{各种临时变量}
n,m,max,i,j:integer;
begin
{开文件}
assign(input,'find.in');reset(input);
assign(output,'find.out');rewrite(output);
{输入n,m}
readln(n,m);
{初始化节点孩子数为0,也可用fillchar过程}
for i:=1 to n do
c[i]=0;
{读树节点关系对,遍历所有关系对,每次为父节点的孩子节点数+1,即计算每个节点的孩子数,如果某个节点为另一个节点的孩子,那这个节点有父节点,即d数组对应为1}
for i:=1 to m do
begin
readln(a[i],b[i]);
inc(c[a[i]]);
d[b[i]]:=1;
end;
{找出root,如果一个节点没有父节点,即为root}
for i:=1 to n do if d[i]=0 then begin writeln(i); break end;
{取第一个节点的孩子数为基,遍历所有节点找出最大的孩子数,此时max变数最大的孩子节点数}
max:=c[1];
for i:=1 to n do
if c[i]>max then max:=c[i];
{找出有孩子节点数最多的节点,这步可在上步中一同进行,此时max变量表示拥有最大孩子节点数的节点号}
for i:=1 to n do
if c[i]=max then begin writeln(i); max:=i; break; end;
{输出,源代码中}
for i:=1 to m do
if a[i]=max then write(b[i],' ');
close(input);
close(output);
end.

一道poj上的题目求poj2253 的pascal程序 关于‘pascal.’的一道题的程序解释6.找树根和孩子(find.pas)Description 给定一棵树,输出树的根root,孩子最多的结点max以及他的孩子.Input 第一行:n(结点个数),m(边数). 以下m行;每行两个结 pascal关于因式分解的有关问题用pascal语言编出一个程序输入:100输出:2*2*5*5急用! Miller-Rabbin素数测试法求一个用Miller-Rabbin算法判断是否为素数的程序,注意要用PascalPascal!Pascal!Pascal!Pascal!Pascal!Pascal!Pascal!Pascal!最好有说明 求一个背包程序(PASCAL)最原始的 化学方程式配平程序的设计如何设计pascal语言 急求TURBO PASCAL 急求关于TURBO PASCAL 一道要关于FOR的,另外两道一道是过程的,一道是函数的,题目可以自己编,但是要与化学有关的, 计算1901年到2099年之间的某月某日是星期几有没人能针对这个问题给出完整的pascal程序以及详细的解释呀? 一道PASCAL题 读入10个数,计算它们的和、积、平方和及和的平方 求助一道pascal高精度乘法题:输入两个正整数m、n,输出他们的积.( 1 用pascal语言做一道题读入三个整数,找出并输出其中最大的数 用pascal编写程序 输入十个整数,统计大于0的数的个数.用pascal编写程序输入十个整数,统计大于0的数的个数. 一道关于有丝分裂的生物题,求分析解释.. 一道关于VFP的选择题,可否帮忙解释下为什么选D,执行下列程序,显示结果是().S=0N=1DO WHILE N PASCAL怎么产生不同的随机数?(在同一范围内)简单点的程序 N 的倍数 pascal语言写一个程序,对于给定的一个自然数N(0 pascal问题,求程序:1、 文本文件t.in中第一行的一个 正整数N(N 用PASCAL语言编写一个求1+2+3+...+N的程序