Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cmath>
- #include <vector>
- #include <set>
- #include <string>
- #include <algorithm>
- using namespace std;
- using ll = long long;
- void cv(vector <int> v){
- for (auto x: v) cout<<x<<' ';
- cout<<'\n';
- }
- vector <int> dx = {0, 1, 0, -1};
- vector <int> dy = {1, 0, -1, 0};
- bool gd(int i, int j, vector <vector <int> > &ds){
- int N = ds.size();
- bool can = 1;
- if (i < 0 || i >= N || j < 0 || j >= N){
- can = 0;
- }
- else if (ds[i][j] != -1) can = 0;
- return can;
- }
- //если 585 находится на предпоследнем элементе диагонали, то выводим ответ
- //если 585 уже точно не находится на предпоследнем элементе диагонали, то прекращаем работу
- int f(int N){
- vector <vector <int> > ds(N, vector <int> (N, -1));
- int d = 1;
- int x = 0, y = 0;
- int dir = 0;
- int res = -1;
- //1 - еще не нашли
- //2 - нашли
- //3 -- уже точно нельзя найти
- for (int i = 0; i < N*N;++i){
- ds[x][y] = d;
- d++;
- if (!gd(x + dx[dir], y + dy[dir], ds)){
- dir = (dir+1) % 4;
- }
- x += dx[dir];
- y += dy[dir];
- if (x < N - 2 && y < N - 2 && d == 585) {
- break;
- res = 3;
- }
- if (x == N - 2 && y == N - 2){
- if (d == 585) res = 2;
- else res = 1;
- break;
- }
- }
- return res;
- }
- //вывести матрицу -- чтобы проверить, насколько правильный алгоритм обхода матрицы
- void F(int N){
- vector <vector <int> > ds(N, vector <int> (N, -1));
- int d = 1;
- int x = 0, y = 0;
- int dir = 0;
- int res = -1;
- //1 - еще не нашли
- //2 - нашли
- //3 -- уже точно нельзя найти
- for (int i = 0; i < N*N;++i){
- ds[x][y] = d;
- d++;
- if (!gd(x + dx[dir], y + dy[dir], ds)){
- dir = (dir+1) % 4;
- }
- x += dx[dir];
- y += dy[dir];
- }
- for (auto x: ds){
- for (auto y: x){
- cout<<y<<' ';
- }cout<<'\n';
- }
- }
- int main()
- {
- /*int N;
- cin>>N;
- F(N);*/
- int cnt = 1, ans = -1;
- bool can = 0;
- while (true){
- if (f(cnt) == 2){
- can = 1;
- ans = cnt;
- break;
- }
- else if (f(cnt) == 3){
- break;
- }
- cnt++;
- }
- if (can) cout<<ans<<'\n';
- else cout<<"NULL\n";
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement