UVA

//我觉得该注意的地方,都写在注释里了,这题应该也算水题,不难,数据也没有特殊的格式,比较需要注意的就是,写循环的时候,不要把自己绕进去绕晕了
#include <bits/stdc++.h>
using namespace std;
const int N = 12;
char maze[N][N];
int num[N][N];

void shownum(int r, int c)
{
	for (int i = 0; i < r; i++)
	{
		for (int j = 0; j < c; j++)
		cout << num[i][j] << " ";
		cout << endl;
	}
}

int main()
{
	int r, c;
	int kase = 0;
	while (cin >> r)
	{
		if (!r) break;
		cin >> c;
		int m = 1;
		
		memset(num, 0, sizeof(num));
		for (int i = 0; i < r; i++)
		for (int j = 0; j < c; j++)
		cin >> maze[i][j];
		
		for (int i = 0; i < r; i++)
		for (int j = 0; j < c; j++)//找出所有起始格并编号 
		{
			if (maze[i][j] == '*')
			continue;//首先要是白格,才有可能是起始格 
			if (i == 0 || j == 0 || (i > 0 && maze[i - 1][j] == '*') || (j > 0 && maze[i][j - 1] == '*'))
			{
				num[i][j] = m++;
			}
		}
	//	shownum(r, c);
		
		if (kase) cout << endl;
		else kase = 1;
		
		cout << "puzzle #" << kase++ << ":" << endl << "Across" << endl;
		
		for (int i = 0; i < r; i++)
		{
		//	int j = 0; //这句一定要注意!当初想当然,把它和for循环的第一句int i = 0 放在了一起,现在想来真是太不仔细了!应该是外层循环每走一次,都要把j重新初始化为0,有些类似冒泡的双重循环,慎之!!!
			
			for (int j = 0; j < c; j++)
			{
				if (num[i][j] == 0) continue;
/*				{
					j++;//此处一定不要忘记j的自增,使得判断对象变为该行的下一列,若漏掉这句,可能会无限循环 
					continue;//如果为起始格,对应的num数组里的值不会是0
				}*/
				
				
				cout << setw(3) << num[i][j] << "." << maze[i][j];
/*				j++;
				
				while (j < c && maze[i][j] != '*')
				{
					cout << maze[i][j];
					j++;
				}*/
				for (j = j + 1; j < c && maze[i][j] != '*'; j++) cout << maze[i][j];
				cout << endl;
			}	
			
		}
		cout << "Down" << endl;
		
		for (int i = 0; i < r; i++)
		for (int j = 0; j < c; j++)
		{
			if (!num[i][j]) continue;
			
			cout << setw(3) << num[i][j] << "." << maze[i][j];
			
		/*	int k = i + 1;
			while (k < r && maze[k][j] != '*')
			{
				cout << maze[k][j];
				num[k][j] = 0; //起始格原来分为两类,横着的起始格和竖着的,如果是横情况下的起始格,并在竖着时作为普通字母格输出,则它在此后,也不能再作为任何竖列的起始格
				k++;
			}*/
			for (int k = i + 1; k < r && maze[k][j] != '*'; k++)
			{
				cout << maze[k][j];
				num[k][j] = 0;
			}
			cout << endl;
		} 	
	}
	return 0;
}


原文地址:https://www.cnblogs.com/mofushaohua/p/7789504.html