pascal编程,有关图的遍历邮递员在送信时,为了节省路途,自己规定:每次总是从n个村子中选择其中一个合适的村子出发,途中每个村子仅且经过一次,送完所有的信.已知各个村子的道路连通情况
来源:学生作业帮助网 编辑:作业帮 时间:2024/06/24 17:57:22
![pascal编程,有关图的遍历邮递员在送信时,为了节省路途,自己规定:每次总是从n个村子中选择其中一个合适的村子出发,途中每个村子仅且经过一次,送完所有的信.已知各个村子的道路连通情况](/uploads/image/z/6935656-40-6.jpg?t=pascal%E7%BC%96%E7%A8%8B%2C%E6%9C%89%E5%85%B3%E5%9B%BE%E7%9A%84%E9%81%8D%E5%8E%86%E9%82%AE%E9%80%92%E5%91%98%E5%9C%A8%E9%80%81%E4%BF%A1%E6%97%B6%2C%E4%B8%BA%E4%BA%86%E8%8A%82%E7%9C%81%E8%B7%AF%E9%80%94%2C%E8%87%AA%E5%B7%B1%E8%A7%84%E5%AE%9A%EF%BC%9A%E6%AF%8F%E6%AC%A1%E6%80%BB%E6%98%AF%E4%BB%8En%E4%B8%AA%E6%9D%91%E5%AD%90%E4%B8%AD%E9%80%89%E6%8B%A9%E5%85%B6%E4%B8%AD%E4%B8%80%E4%B8%AA%E5%90%88%E9%80%82%E7%9A%84%E6%9D%91%E5%AD%90%E5%87%BA%E5%8F%91%2C%E9%80%94%E4%B8%AD%E6%AF%8F%E4%B8%AA%E6%9D%91%E5%AD%90%E4%BB%85%E4%B8%94%E7%BB%8F%E8%BF%87%E4%B8%80%E6%AC%A1%2C%E9%80%81%E5%AE%8C%E6%89%80%E6%9C%89%E7%9A%84%E4%BF%A1.%E5%B7%B2%E7%9F%A5%E5%90%84%E4%B8%AA%E6%9D%91%E5%AD%90%E7%9A%84%E9%81%93%E8%B7%AF%E8%BF%9E%E9%80%9A%E6%83%85%E5%86%B5)
pascal编程,有关图的遍历邮递员在送信时,为了节省路途,自己规定:每次总是从n个村子中选择其中一个合适的村子出发,途中每个村子仅且经过一次,送完所有的信.已知各个村子的道路连通情况
pascal编程,有关图的遍历
邮递员在送信时,为了节省路途,自己规定:每次总是从n个村子中选择其中一个合适的村子出发,途中每个村子仅且经过一次,送完所有的信.已知各个村子的道路连通情况.请你帮邮递员选择一条合适的路线.
输入:
第一行:整数n:村子的个数.
接下来是一个n*n的0、1矩阵,表示n个村子的连同情况,如:a[I,j]=1 ,表示第i和第j个村子之间有路可走,如果a[I,j]=0,表示他们之间无路可走.
输出:一条可行的路线
输入:
7
0 1 0 1 1 0 0
1 0 1 0 1 0 0
0 1 0 0 0 0 1
1 0 0 0 0 0 0
1 1 0 0 0 1 0
0 0 0 0 1 0 1
0 0 1 0 0 1 0
输出:
2 3 7 6 5 1 4
我的程序如下:
const maxn=100;
var a:array[1..maxn,1..maxn]of integer;
visited:array[1..maxn]of 0..1;
b:array[1..maxn] of 1..maxn;
n,m,i:integer; found:integer;
procedure init;
var i,j:integer;
begin
assign(input,'hmdl.in');reset(input);
readln(n);
for i:=1 to n do
for j:=1 to n do read(a[i,j]);
close(input);
end;
procedure print;
var i:integer;
begin
found:=1;
for i:=1 to n-1 do write(b[i],' ');
writeln(b[n]);
end;
procedure dfs(i:integer);
var j,k:integer;
begin
if n=m then print;
for j:=1 to n do
if (a[j,i]=1) and (visited[j]=0) then
begin
visited[j]:=1;
m:=m+1;
b[m]:=j;
dfs(j);
visited[j]:=0;
m:=m-1;
end;
end;
Begin
init;
found:=0;
for i:= 1 to n do
begin
fillchar(visited,sizeof(visited),0);
m:=1;
b[1]:=i;
visited[i]:=1;
dfs(i);
end;
if found=0 then writeln('no road');
end.
我的输出如下,所有可以走的路径:
2 3 7 6 5 1 4
3 7 6 5 2 1 4
4 1 2 3 7 6 5
4 1 2 5 6 7 3
4 1 5 2 3 7 6
4 1 5 6 7 3 2
5 6 7 3 2 1 4
6 7 3 2 5 1 4
怎么控制只输出一条可行的路径就好呢?
pascal编程,有关图的遍历邮递员在送信时,为了节省路途,自己规定:每次总是从n个村子中选择其中一个合适的村子出发,途中每个村子仅且经过一次,送完所有的信.已知各个村子的道路连通情况
在print那个过程里,输出的后面,end;的前面,如果用文件就把文件close掉,然后再打halt;(结束程序)就只会输出一种了.
修改后如下:
procedure print;
var i:integer;
begin
found:=1;
for i:=1 to n-1 do write(b[i],' ');
writeln(b[n]);
halt;
end;