pascal 迷宫问题
Problem3:苹果迷宫(maze)源文件名:maze.(pas/c/cpp)输入文件:maze.in输出文件:maze.out时间限制:1秒空间限制:64M背景xia...
Problem 3:苹果迷宫(maze)
源文件名:maze.(pas/c/cpp)
输入文件:maze.in
输出文件:maze.out
时间限制:1秒
空间限制:64M
背景
xiaoT来到了山谷的另一端,发现后面有一片苹果树林,xiaoT想:刚才我花了那么多钱买苹果。现在终于可以自己摘苹果了。他发现苹果树林前面是一个迷宫。这个迷宫相当的“简单”。中间没有一堵墙。xiaoT想:这样的话我就能很快的走过去了。但是他发现,这个迷宫的地面并不是一样的,有些被涂成了红色,有一些被涂成了青色。迷宫很有规律:
迷宫是一个长方形。竖着向下走a步,再水平向右走b步能到一个格子,如果a>b,那么这个格子就是红色的,否则是青色的
xiaoT要从左上角走到右下角。
在迷宫旁边的帮助上写着,你只有把同样颜色的苹果放在同样颜色的格子里面,你才能走到这个格子上面(Q:苹果能捡回来吗?A:捡回来的苹果你还要吗?Q:要!A:…是不能捡回来的)。xiaoT想:又要去买苹果了…
问题描述
苹果有两种,一种青苹果,一种红苹果。这两种苹果的价格是不一样的,红苹果的单价为2。青苹果的单价为1。
输入格式
第一行是两个正整数n,m迷宫两边的长度(如图所示)。
输出格式
在买苹果的的花费最少的情况下,xiaoT有几种方法走到右下角。由于路可能很多很多,你只要输出方案数除以1234321的余数就行了。
样例输入 maze.in
4 5
样例输出 maze.out
42
样例解释
如图所示
数据规模
对于60%的数据,n,m≤1000
对于100%的数据,n,m≤32766
var n,m,i,j,z,v:longint;
b:array[0..40000,0..40000] of integer;
min,t:longint;
procedure try( k:integer);
var i,x,y:integer;
m:longint;
begin
if k=1 then begin x:=1; y:=1; m:=1; k:=k+2;end
else
while k<=m+n+1 do
for i:=1 to 2 do
begin
if (i=1) and(x<n+1) then begin x:=x+1; m:=m+b[x,y]; k:=k+1; try(k); end
else if (i=2)and(y<m+1) then begin y:=y+1; m:=m+b[x,y]; k:=k+1; try(k); end;
end;
if (k=m+n+2)and(m=min) then t:=t+1;
end;
begin
//assign(input,'maze.in');reset(input);
//assign(output,'maze.out'); rewrite(output);
readln(n); readln(m);
for i:=1 to n+1 do
for j:=1 to m+1 do
if i>j then b[i,j]:=2 else b[i,j]:=1;
for z:=1 to n+1 do
begin
for v:=1 to m do
write(b[z,v], ' ');
writeln(b[z,m+1]);
end;
min:=m+1;
for i:=2 to n+1 do
min:=min+ b[i,m+1];
writeln(min);
t:=0; try(1);
writeln(t mod 1234321); // close(input);close(output);
end.
编译成功
运行错误 216 错误为存取非法
我把程序分段屏蔽后 错误确定在 读入数据后的第一次循环附直 如下
for i:=1 to n+1 do
for j:=1 to m+1 do
if i>j then b[i,j]:=2 else b[i,j]:=1;
希望大家能够运行一 题目图片没输入
QQ 378632668 E-MAIL 378632668@qq.com 展开
源文件名:maze.(pas/c/cpp)
输入文件:maze.in
输出文件:maze.out
时间限制:1秒
空间限制:64M
背景
xiaoT来到了山谷的另一端,发现后面有一片苹果树林,xiaoT想:刚才我花了那么多钱买苹果。现在终于可以自己摘苹果了。他发现苹果树林前面是一个迷宫。这个迷宫相当的“简单”。中间没有一堵墙。xiaoT想:这样的话我就能很快的走过去了。但是他发现,这个迷宫的地面并不是一样的,有些被涂成了红色,有一些被涂成了青色。迷宫很有规律:
迷宫是一个长方形。竖着向下走a步,再水平向右走b步能到一个格子,如果a>b,那么这个格子就是红色的,否则是青色的
xiaoT要从左上角走到右下角。
在迷宫旁边的帮助上写着,你只有把同样颜色的苹果放在同样颜色的格子里面,你才能走到这个格子上面(Q:苹果能捡回来吗?A:捡回来的苹果你还要吗?Q:要!A:…是不能捡回来的)。xiaoT想:又要去买苹果了…
问题描述
苹果有两种,一种青苹果,一种红苹果。这两种苹果的价格是不一样的,红苹果的单价为2。青苹果的单价为1。
输入格式
第一行是两个正整数n,m迷宫两边的长度(如图所示)。
输出格式
在买苹果的的花费最少的情况下,xiaoT有几种方法走到右下角。由于路可能很多很多,你只要输出方案数除以1234321的余数就行了。
样例输入 maze.in
4 5
样例输出 maze.out
42
样例解释
如图所示
数据规模
对于60%的数据,n,m≤1000
对于100%的数据,n,m≤32766
var n,m,i,j,z,v:longint;
b:array[0..40000,0..40000] of integer;
min,t:longint;
procedure try( k:integer);
var i,x,y:integer;
m:longint;
begin
if k=1 then begin x:=1; y:=1; m:=1; k:=k+2;end
else
while k<=m+n+1 do
for i:=1 to 2 do
begin
if (i=1) and(x<n+1) then begin x:=x+1; m:=m+b[x,y]; k:=k+1; try(k); end
else if (i=2)and(y<m+1) then begin y:=y+1; m:=m+b[x,y]; k:=k+1; try(k); end;
end;
if (k=m+n+2)and(m=min) then t:=t+1;
end;
begin
//assign(input,'maze.in');reset(input);
//assign(output,'maze.out'); rewrite(output);
readln(n); readln(m);
for i:=1 to n+1 do
for j:=1 to m+1 do
if i>j then b[i,j]:=2 else b[i,j]:=1;
for z:=1 to n+1 do
begin
for v:=1 to m do
write(b[z,v], ' ');
writeln(b[z,m+1]);
end;
min:=m+1;
for i:=2 to n+1 do
min:=min+ b[i,m+1];
writeln(min);
t:=0; try(1);
writeln(t mod 1234321); // close(input);close(output);
end.
编译成功
运行错误 216 错误为存取非法
我把程序分段屏蔽后 错误确定在 读入数据后的第一次循环附直 如下
for i:=1 to n+1 do
for j:=1 to m+1 do
if i>j then b[i,j]:=2 else b[i,j]:=1;
希望大家能够运行一 题目图片没输入
QQ 378632668 E-MAIL 378632668@qq.com 展开
2个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询