画海岛地图

成绩 0 开启时间 2013年01月16日 星期三 15:10
折扣 0.8 折扣时间 2013年01月16日 星期三 15:10
允许迟交 关闭时间 2013年01月16日 星期三 15:10
输入文件 island.in 输出文件 island.out

【问题描述】

用 N*N(1<=N<=8) 的格点阵代表海,其中 * 代表岛。给你一组编码信息,让你重构一张地图。这组信息是按垂直方向、水平方向岛的分布情况摘取的。下例中,每行右边的数字按顺序表示该行中“岛组”的大小,如第一行数字为“ 1 2 ”,表示该行第一“岛组”由一个岛组成,第二“岛组”由两个岛组成,而第四列下面的“ 2 3 ”则表示本列由两个“岛组”组成,第一个“岛组”由两个岛组成,第二个“岛组”由三个岛组成。


现要求你编程解决下列问题:

任务

读取一个信息块,根据信息块重构地图(若有多个解,逐个构成地图)。

【输入格式】

第一行:N N表示格点阵大小(N<=8)

第2—N+1 行岛组信息

第N+2—2N+1 列岛组信息

***所有的島組信息都是以0結尾。


【输出格式】

第一行:岛组编号

第2—N+1行:*号表示的地图

若有多个解时,按上面格式依次输出(输出顺序按地图中最上,最左边的*号位置(i,j)由小到大排序,i是第一关键字,j是第二关键字)

若无解时,输出'no'.

【输入输出样例

输入:

island.in

8
1 1 1 1 0
1 1 1 1 0
1 1 1 1 0
1 1 1 1 0
1 1 1 1 0
1 1 1 1 0
1 1 1 1 0
1 1 1 1 0
1 1 1 1 0
1 1 1 1 0
1 1 1 1 0
1 1 1 1 0
1 1 1 1 0
1 1 1 1 0
1 1 1 1 0
1 1 1 1 0

输出:

island.out

1
* * * *
 * * * *
* * * *
 * * * *
* * * *
 * * * *
* * * *
 * * * *
2
 * * * *
* * * *
 * * * *
* * * *
 * * * *
* * * *
 * * * *
* * * *