(暴力枚举) $O(9 * 1000 * 1000)$
这个程序还是比较简单的。
C++ 代码
#include <bits/stdc++.h>
using namespace std;
typedef pair<int,int> PII;
const int N = 1010;
int n,m;
char g[N][N];
vector<PII> res;
bool check(int x,int y) //这个函数的作用就是判断{x,y}这个点周围有没有m的。
{
for(int i = x - 1;i <= x + 1;i++)
{
for(int j = y - 1;j <= y + 1;j++)
{
if(i < 0 || i > n || j < 0 || j > m) continue;
if(g[i][j] == 'm') return true;
}
}
return false;
}
bool influenc(int x,int y) //这个函数就是判断i,j这个点的周围有没有c的
{
for(int i = x - 1;i <= x + 1;i++)
{
for(int j = y - 1;j <= y + 1;j++)
{
if(g[i][j] == 'c') return true;
}
}
return false;
}
int main()
{
cin >> n >> m;
//下面就是找出冷水豚c的。
int x1,y1;
for(int i = 1;i <= n;i++)
{
for(int j = 1;j <= m;j++)
{
cin >> g[i][j];
if(g[i][j] == 'c') x1 = i,y1 = j;
}
}
//找出这个不合理的水豚
int x2 = 0,y2 = 0;
for(int i = 1;i <= n;i++)
{
for(int j = 1;j <= n;j++)
{
if(g[i][j] == 'w' && !check(i,j))
{
x2 = i,y2 = j;
break;
}
}
}
if(x2 == 0)
{
puts("Too cold!"); //如果没有不合理就是直接输出的。
return 0;
}
else //否则就是枚举这个不合理的点的周围8个点的。如果是'.'且它周围没有'c'就是可以作为答案的。
{
for(int i = x2 - 1;i <= x2 + 1;i++)
{
for(int j = y2 - 1;j <= y2 + 1;j++)
{
if(!influenc(i,j) && g[i][j] == '.') res.push_back({i,j});
}
}
}
if(res.empty()) puts("Too cold!"); //如果没有上述合理的点就是无解的。
else //否则就是输出的。
{
for(auto h : res)
{
cout << h.first << ' ' << h.second << endl;
}
}
return 0;
}