using namespace std; #include #include #include #include #include #include #define ll long long set v[50*50+1]; map, ll> m; void haku(ll y, ll x, map,ll> g) { set s = v[g[{y, x}]]; pair u = { y - 1,x }, r = { y,x + 1 }, d = { y + 1,x }, l = { y,x - 1 }; vector> c; ll n = 0; if (y > 1) { if (!g[u]) { n++; c.push_back(u); } else if (s.count(g[u]))s.erase(g[u]); } if (x < 3) { if (!g[r]) { n++; c.push_back(r); } else if (s.count(g[r]))s.erase(g[r]); } if (y < 3) { if (!g[d]) { n++; c.push_back(d); } else if (s.count(g[d]))s.erase(g[d]); } if (x > 1) { if (!g[l]) { n++; c.push_back(l); } else if (s.count(g[l]))s.erase(g[l]); } if (n == 0 && s.empty()) { m = g; return; } if (n < s.size()) return; else { vector s1(s.begin(), s.end()); vector>> c1; if (n > s1.size()) { } else c1.push_back(c); for (auto i : c1) { do { map, ll> g1 = g; pair p; bool b = true; for (ll j=0;j u; for (ll j = 1; j <= 100; j++) { ll x; f >> x; u.push_back(x); cout << x << " "; } cout << endl; for (ll j = 0; j < 100; j++) { if (j > 0) v[u[j]].insert(u[j - 1]); if (j < 99) v[u[j]].insert(u[j + 1]); } } vector a; for (ll i = 1; i <= 50*50; i++) { if (v[i].size() < 3)a.push_back(i); } ll n = 0; while (m.empty() && n < a.size()) { map, ll> g; g[{1, 1}] = a[n]; haku(1, 1, g); n++; } if (m.empty())cout << "QAQ"; else { for (ll i = 1; i <= 50; i++) { for (ll j = 1; j <= 50; j++) { cout << m[{i, j}] << " "; } cout << endl; } } }