用BFS做的。
代码:
#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define LOCAL // 提交时注释掉 bool v[55][55]; vector < pair > vp[2505]; int dr[] = {0, 1, -1}; int dc[] = {1, 0, 0}; int main() { #ifdef LOCAL freopen(data.txt, r, stdin); #endif int n, m, k; cin >> n >> m >> k; int _k = k; int cnt = 0; memset(v, 0, sizeof(v)); queue < pair > q; q.push( make_pair(1, 1) ); map < pair , vector > > mp; v[1][1] = true; vp[k].push_back( make_pair(1, 1) ); mp[ make_pair(1, 1) ] = vp[k]; cnt += vp[k].size(); --k; while (k > 0) { int r = q.front().first; int c = q.front().second; q.pop(); int next_r, next_c; for (int i = 0; i < 3; i++) { next_r = r + dr[i]; next_c = c + dc[i]; if (next_r < 1 || next_r > n || next_c < 1 || next_c > m) { continue; } if (!v[next_r][next_c]) { v[next_r][next_c] = true; q.push( make_pair(next_r, next_c) ); vp[k] = mp[ make_pair(r, c) ]; vp[k].push_back( make_pair(next_r, next_c) ); mp[ make_pair(next_r, next_c) ] = vp[k]; cnt += vp[k].size(); --k; if (k <= 0) { break; } } } } printf(%d , cnt); for (int i = 1; i <= _k; i++) { int s = vp[i].size(); for (int j = 0; j < s; j++) { printf((%d, %d) , vp[i][j].first, vp[i][j].second); } printf( ); } return 0; }