新连连看 pascal 求详细分析和代码

[复制链接]
查看11 | 回复1 | 2011-8-15 23:30:26 | 显示全部楼层 |阅读模式
题目描述:
许多人都玩过连连看游戏。今天玩一个类似的游戏。在一个由10*10个小方格组成的矩阵里面有n(n<=10)对字符(它们是大写字符中的前n个)。矩阵里有些位置可以从上面走过,有些则不能。能走过的位置用“.”标识,不能的用“#”标识。如果两个相同字符是连通的(从一个字符能走到另一个字符,注意只能向上,下,左,右走。某个位置有其他字符时,这个位置是不能走的),那么这对字符能够进行配对。如果将这对字符配对,这对字符将从这个矩阵里消除,也就是说,这两个字符所在的位置对于其他字符而言变成能走动了。现在的问题是:请你决定这些字符的配对顺序(只有能配对的才能进行配对),使得n对字符最后都配对成功。
输入:
先给出一个正整数t(t<=10),表示有t组测试数据。
每组测试数据有10行组成,每行有10个字符。这些字符只能是“.”、“#”,或者是大写字符的前n个。每组测试数据中不超过10对字符。
输出:
如果能够使每组测试数据中的n对字符配对成功,输出配对的顺序。如果有多种配对成功的顺序,输出字典中顺序最小的那组。否则,输出“My God!”。
样例输入:
2
ABF.......
CE........
D.........
..........
..........
..........
..........
.........D
........EC
.......FBA
ABF.......
CE........
D.........
..........
..........
.........#
........#D
.........#
........EC
.......FBA
样例输出:
DCABEF
My God!

回复

使用道具 举报

千问 | 2011-8-15 23:30:26 | 显示全部楼层
连连看是一个任意有解的游戏,所以每次只要从小到大来判断每个字符可不可以被消掉就行了.至于怎么判断,这个棋盘异常小,直接搜索都应该可以. type pt = record
x,y:integer;
end;var i,j,k,l,n,s,times:longint;
map:array[0..11,0..11]of integer;
rec:array['A'..'K']of boolean;
flag:array[1..10]of boolean;
a,b:array[1..11]of pt;
st:string;
f:boolean;...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行