洛谷题解P1518 [USACO2.4] 两只塔姆沃斯牛 The Tamworth Two
https://www.luogu.com.cn/problem/P1518
简简单单的模拟题.
#include <iostream>
#include <vector>
using namespace std;char map[12][12];
pair<int, int> cow_vec = { -1, 0 };
pair<int, int> farmer_v = { -1, 0 };
pair<int, int> cow;
pair<int, int> farmer;int record[12][12][3][3][12][12][3][3] = {0};void turn(pair<int, int>& vec)
{int x = vec.first;int y = vec.second;vec.first = y;vec.second = -x;return;
}int fetch_cow() {int time = 0;while (true) {if (cow == farmer) return time;if (record[cow.first][cow.second][cow_vec.first + 1][cow_vec.second + 1][farmer.first][farmer.second][farmer_v.first + 1][farmer_v.second + 1])return 0;record[cow.first][cow.second][cow_vec.first + 1][cow_vec.second + 1][farmer.first][farmer.second][farmer_v.first + 1][farmer_v.second + 1] = 1;if (map[cow.first + cow_vec.first][cow.second + cow_vec.second] == '*')turn(cow_vec);else {cow.first += cow_vec.first;cow.second += cow_vec.second;}if (map[farmer.first + farmer_v.first][farmer.second + farmer_v.second] == '*')turn(farmer_v);else {farmer.first += farmer_v.first;farmer.second += farmer_v.second;}time++;}
}int main()
{for (int i = 1; i < 11; ++i){for (int j = 1; j < 11; ++j){cin >> map[i][j];if (map[i][j] == 'C'){cow = { i, j };map[i][j] = '.';}else if (map[i][j] == 'F'){farmer = { i, j };map[i][j] = '.';}}}for (int i = 0; i < 12; ++i){map[0][i] = '*';map[i][0] = '*';map[11][i] = '*';map[i][11] = '*';}cout << fetch_cow()<< endl;return 0;
}