UVa Problem 10189 Minesweeper (扫雷)

#include<iostream>
using namespace std;

int input[105][105];
char output[105][105];

int direction[8][8]={
	{-1,1},{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1},{-1,0}
};

int main()
{
	int n,m;
	char ch;
	int num=0;
	while(cin>>n>>m&&m&&n)
	{
		num++;
		//此处是个小技巧,保证最后一行不输出回车,不然算作Presentat Error!
		if(num!=1)
			cout<<endl;
		for(int i=0;i<n;i++)
			for(int j=0;j<m;j++)
			{
				cin>>ch;
				if(ch=='*')
					input[i][j]=1;
				else
					input[i][j]=0;
			}

		for(int i=0;i<n;++i)
			for(int j=0;j<m;++j)
			{
				if(input[i][j]==1)
					output[i][j]='*';
				else
				{
					int count=0;
					for(int k=0;k<8;++k)
					{
						if(i+direction[k][0]>=0&&j+direction[k][1]>=0&&
							i+direction[k][0]<n&&j+direction[k][1]<m&&input[i+direction[k][0]][j+direction[k][1]]==1)
								count++;
					}
					output[i][j]=count+'0';
				}
			}

		cout<<"Field #"<<num<<":"<<endl;
		for(int i=0;i<n;i++)
		{
			for(int j=0;j<m;j++)
				cout<<output[i][j];
			cout<<endl;
		}
	}
	return 0;
}

你可能感兴趣的:(UVa Problem 10189 Minesweeper (扫雷))