题目连接:http://hihocoder.com/problemset/problem/1094?sid=860836
此题是暴力枚举的方法:
1.首先在地图中找到他所在的中心位置,因为,无论他是否不知方向,中心位置是不会变的。
2.找到中心位置后,要进行对比,这里有四种情况。分别枚举即可
#include<iostream>
using namespace std;
int main(void)
{
int i, j, n, m;
char map[205][205], b[5][5]; //b为他的周围情况
cin>>n>>m;
for(i = 1; i <= n; i++)
for(j = 1; j <= m; j++)
cin>>map[i][j]; //放入map中
for(i = 1; i <= 3; i++)
for(j = 1; j <= 3; j++)
cin>>b[i][j];
for(i = 2; i < n; i++)
for(j = 2; j < m; j++)
if(map[i][j] == b[2][2]) //当满足中心相等时开始枚举
{
if(map[i - 1][j - 1] == b[1][1] && map[i - 1][j] == b[1][2] && map[i - 1][j + 1] == b[1][3] &&
map[i][j + 1] == b[2][3] && map[i + 1][j + 1] == b[3][3] && map[i + 1][j] == b[3][2] &&
map[i + 1][j - 1] == b[3][1] && map[i][j - 1] == b[2][1])
cout <<i<<" "<<j<<endl;
else if(map[i - 1][j + 1] == b[1][1] && map[i][j + 1] == b[1][2] && map[i + 1][j + 1] == b[1][3] &&
map[i + 1][j] == b[2][3] && map[i + 1][j - 1] == b[3][3] && map[i][j - 1] == b[3][2] &&
map[i - 1][j - 1] == b[3][1] && map[i - 1][j] == b[2][1])
cout <<i<<" "<<j<<endl;
else if(map[i + 1][j + 1] == b[1][1] && map[i + 1][j] == b[1][2] && map[i + 1][j - 1] == b[1][3] &&
map[i][j - 1] == b[2][3] && map[i - 1][j - 1] == b[3][3] && map[i - 1][j] == b[3][2] &&
map[i - 1][j + 1] == b[3][1] && map[i][j + 1] == b[2][1])
cout <<i<<" "<<j<<endl;
else if(map[i + 1][j - 1] == b[1][1] && map[i][j - 1] == b[1][2] && map[i - 1][j - 1] == b[1][3] &&
map[i - 1][j] == b[2][3] && map[i - 1][j + 1] == b[3][3] && map[i][j + 1] == b[3][2] &&
map[i + 1][j + 1] == b[3][1] && map[i + 1][j] == b[2][1])
cout<<i<<" "<<j<<endl;
}
}