Nonogram 生成器
时间限制: 1 Sec 内存限制: 128 MB[ 提交][ 状态][ 论坛]
题目描述
Nonogram 是一种逻辑游戏,以猜谜的方式绘画点阵图。在一个网格中,每一行和列都有一组数,玩家需根据它们来填满或留空格子,最后就可以由此得出一幅图画。 如下图,游戏开始之前只有左边和上面的数字,中间的点阵图是玩家得到的结果。每行左边的数字描述了这行里面有多少条独立的线。如第一行左边的“6 4 2”表示第一行有三条线,长度依次为 6、4、2。列上方的数字也类似。 BUCT-ACM 的成员打算做一个自己的 Nonogram 的游戏,第一步就是把网上下载到的小图案转换成 Nonogram 里的数字描述形式。现在就请你完成这步。

输入
第一行两个整数 h w(1 ≤ h, w ≤20),分别表示点阵图的宽度和高度。 以下 h 行,每行 w 个字符,描述了这个点阵图,其中“#”表示黑色的点,“.”表示空白的位置。
输出
一共 h + w 行。 先 h 行,依次描述每行左边的数字,数字之间用空格隔开。 然后 w 行,依次描述每列上方的数字,数字之间用空格隔开。 如果某一行或者列没有任何颜色标记,则需要输出一个空行。
样例输入
16 16
######..####..##
#......#.####..#
#......######..#
#.......###.#..#
#.....#...##...#
#....#.....#...#
#....#....#....#
#...#.....#....#
#...#....#.....#
#...##...#.....#
#..#.##.#......#
#..#...##......#
#..#...#.......#
#..##.#........#
#..###.........#
##.##..#########
样例输出
6 4 2
1 1 4 1
1 6 1
1 3 1 1
1 1 2 1
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
1 2 1 1
1 1 2 1 1
1 1 2 1
1 1 1 1
1 2 1 1
1 3 1
2 2 9
16
1 1
1
1 6
1 3 3
1 2 2 1
1 1 1
2 2 1
1 2 2 1
4 2 1
5 2 1
3 2 1
3 1
1
1 1
16
1 1 4 1
1 6 1
1 3 1 1
1 1 2 1
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
1 2 1 1
1 1 2 1 1
1 1 2 1
1 1 1 1
1 2 1 1
1 3 1
2 2 9
16
1 1
1
1 6
1 3 3
1 2 2 1
1 1 1
2 2 1
1 2 2 1
4 2 1
5 2 1
3 2 1
3 1
1
1 1
16
#include<cstdio>
using namespace std;
char a[25][25];
int main(){
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
int n,m;
while(scanf("%d%d",&n,&m)!=EOF){
for(int i=0;i<n;i++)
scanf("%s",a[i]);
for(int i=0;i<n;i++){
int s=0,flag=0;
for(int j=0;j<m;j++){
if(a[i][j]=='#'){
s++;
if(j==m-1&&s){
if(flag==0){
printf("%d",s);
flag=1;
}
else
printf(" %d",s);
s=0;
}
}
else if(s){
if(j==m-1)
if(flag==0){
printf("%d",s);
flag=1;
}
else
printf(" %d",s);
else
if(flag==0){
printf("%d",s);
flag=1;
}
else
printf(" %d",s);
s=0;
}
}
printf("\n");
}
for(int i=0;i<m;i++){
int s=0,flag=0;
for(int j=0;j<n;j++){
if(a[j][i]=='#'){
s++;
if(j==n-1&&s){
if(flag==0){
printf("%d",s);
flag=1;
}
else
printf(" %d",s);
s=0;
}
}
else if(s){
if(j==n-1)
if(flag==0){
printf("%d",s);
flag=1;
}
else
printf(" %d",s);
else
if(flag==0){
printf("%d",s);
flag=1;
}
else
printf(" %d",s);
s=0;
}
}
printf("\n");
}
}
return 0;
}