回 帖 发 新 帖 刷新版面

主题:泡泡龙程序

问题描述:这是一个简化版的网络游戏:在一个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个回复)

沙发

啊?真么没人会啊????????????????
帮帮我嘛,我是pascal新手

板凳

555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555

3 楼

555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555

4 楼

不太清楚题目的意思,为什么输入数据有4个3,而输出数据有5个三?

5 楼

图的搜所吗!

6 楼

用数组作棋盘模型,双击i,j处对上下左右搜索,并标记,最后删除标记.

7 楼

这题太简单了,新手都会做!
{$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 楼


毫无算法可言
纯模拟
n<100
怎么都不会暴

我来回复

您尚未登录,请登录后再回复。点此登录或注册