题目描述:点击打开链接
/*
思路:输入存入二维字符数组里,开辟一个整型二维数组标记一下数组,
只需要判断一下出界的情况还有黑格的情况便可。
横向输出比较简单,判断一下黑格然后获取字符串输出便可。
竖向输出多建立了一个布尔数组,用来判断该字符是否输出过。
该题输出比较麻烦,输出差一点都会PE。
*/
import java.util.Scanner;
public class Main
{
public static void main(String[] args)
{
Scanner cin = new Scanner(System.in);
int Case=1;
while(true)
{
int a=cin.nextInt();
if(a==0)break;
int b=cin.nextInt();
char [][]arr=new char[a][b];
for(int i=0;i<a;++i)
arr[i]=cin.next().toCharArray();
int cnt=1;
int [][]mark=new int[a][b];
for(int i=0;i<a;++i)
for(int j=0;j<b;++j)
{
if(arr[i][j]=='*')
continue;
else if((j-1<0||i-1<0)||(arr[i][j-1]=='*'||arr[i-1][j]=='*'))
mark[i][j]=cnt++;
}
if(Case>1)System.out.println();
System.out.println("puzzle #"+(Case++)+":");
System.out.println("Across");
for(int i=0;i<a;++i)
for(int j=0;j<b;++j)
{
if(arr[i][j]=='*')continue;
cnt=j;
String str="";
while(cnt < b && arr[i][cnt]!='*')
str+=arr[i][cnt++];
System.out.printf("%3d.%s\n",mark[i][j],str);
j=cnt;
}
boolean [][]bool=new boolean[a][b];
System.out.println("Down");
for(int i=0;i<a;++i)
{
for(int j=0;j<b;++j)
{
if(arr[i][j]=='*')continue;
if(bool[i][j])continue;
cnt=i;
String str="";
while(cnt < a && arr[cnt][j]!='*')
{
bool[cnt][j]=true;
str+=arr[cnt++][j];
}
System.out.printf("%3d.%s\n",mark[i][j],str);
}
}
}
}
}