主题:泡泡龙程序
longint
[专家分:0] 发布于 2008-05-04 20:26:00
问题描述:这是一个简化版的网络游戏:在一个N N方块构成的棋盘中,每个方块均涂上红、黄、蓝、绿(记为1、2、3、4)中的一种颜色,游戏者可以在最底行任意找一个方块,用鼠标双击这个方块,于是该方块及与之相邻(即在上、下、左、右四个方向上有公共边)的所有的同色方块均被消掉,而因下方失去支持的方块将会自由落下填补空位。下图左边给出一个4 4的棋盘样例,当游戏者双击最底层左边第二个方块后,将会形成右边的布局。
你的任务是编写一个泡泡龙模拟程序,对于给定的一个初始棋盘,计算游戏者双击最底层某个方块后棋盘的布局将会如何。
输入:输入文件H.in,第一行有两个正整数N和M(1≤M≤N≤100),其中N表示棋盘的规模,而M则表示游戏者将双击最底层从左边数起的第M个方块。
接下来的N行每行有N个1至4的整数组成,表示一个初始的棋盘,同一行相邻两个数之间用一个空格隔开。
输出:输出文件H.out也有N行,每行用N个数给出游戏结束后棋盘的布局,没有方块的格子用0表示,同一行相邻两个数之间也用一个空格分开。
输入输出样例:
输入样例:
4 2
1 2 3 4
4 2 4 4
3 4 4 3
1 4 4 3
输出样例
1 0 0 0
4 0 0 3
3 2 0 3
4 2 3 3
回复列表 (共8个回复)
沙发
longint [专家分:0] 发布于 2008-05-05 20:04:00
啊?真么没人会啊????????????????
帮帮我嘛,我是pascal新手
板凳
longint [专家分:0] 发布于 2008-05-05 20:13:00
555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555
3 楼
longint [专家分:0] 发布于 2008-05-05 20:14:00
555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555
4 楼
angwuy [专家分:2280] 发布于 2008-05-07 20:31:00
不太清楚题目的意思,为什么输入数据有4个3,而输出数据有5个三?
5 楼
lixeb [专家分:80] 发布于 2008-05-14 20:19:00
图的搜所吗!
6 楼
lixeb [专家分:80] 发布于 2008-05-14 20:23:00
用数组作棋盘模型,双击i,j处对上下左右搜索,并标记,最后删除标记.
7 楼
Mato完整版 [专家分:1270] 发布于 2008-05-31 20:57:00
这题太简单了,新手都会做!
{$N+}
TYPE
{Integer type declare}
I_ = INTEGER;
SI_ = SHORTINT;
LI_ = LONGINT;
BI_ = BYTE;
WI_ = WORD;
{Real type declare}
R_ = REAL;
SR_ = SINGLE;
DR_ = DOUBLE;
ER_ = EXTENDED;
CR_ = COMP;
{Other type declare}
C_ = CHAR;
B_ = BOOLEAN;
S_ = STRING;
T_ = TEXT;
a1_ = 0..4;
a2_ = 1..100;
VAR
a: ARRAY[a2_,a2_] OF a1_;
n, m: a2_;
t: a1_;
PROCEDURE delblock(x, y: a1_);
BEGIN
IF a[x, y] = t THEN BEGIN
a[x, y] := 0;
IF x > 1 THEN delblock(x - 1, y);
IF x < n THEN delblock(x + 1, y);
IF y > 1 THEN delblock(x, y - 1);
IF y < n THEN delblock(x, y + 1);
END;
END;
PROCEDURE downblock;
VAR i, j, s: a2_;
BEGIN
FOR i:=n - 1 DOWNTO 1 DO
FOR j:=1 TO n DO
FOR s:=i TO n DO BEGIN
IF a[s, j] <> 0 THEN BREAK;
a[s, j] := a[s - 1, j];
a[s - 1, j] := 0;
END;
END;
PROCEDURE input;
VAR
fi: T_;
i, j: a2_;
BEGIN
ASSIGN(fi, 'H.in');
RESET(fi);
READLN(fi, n, m);
FOR i:=1 TO n DO FOR j:=1 TO n DO READ(fi, a[i, j]);
CLOSE(fi);
END;
PROCEDURE print;
VAR
fo: T_;
i, j: a2_;
BEGIN
ASSIGN(fo, 'H.out');
REWRITE(fo);
FOR i:=1 TO n DO BEGIN
FOR j:=1 TO n DO WRITE(fo, a[i, j], ' ');
WRITELN(fo);
END;
CLOSE(fo);
END;
BEGIN
input;
t := a[n, m];
delblock(n, m);
downblock;
print;
END.
8 楼
squll [专家分:20] 发布于 2008-06-07 11:07:00
毫无算法可言
纯模拟
n<100
怎么都不会暴
我来回复