5443 2023. 06. 01 22:49:14 Timi Fantasztikus Kaland Nyílországban cpp14 Hibás válasz 34/100 57ms 98892 KiB
#include <iostream>
#include <bits/stdc++.h>

using namespace std;
bool Matrixban(int x, int y, int n, int m)
{
    return (x>=0 && x<n && y>=0 && y<m);
}

int Keres(int x, int y, int n, int m,vector<vector<char>>& a,
          vector<vector<bool>>& meglatogatott)
{
   if (a[x][y]=='X')
       return -1;
   meglatogatott[x][y]=true;
    if (x==n-1 && y==m-1)
        return 0;
    int md, minimum=100000000;
    bool ok=false;
    if (a[x][y]=='E')
    {
        if (Matrixban(x, y+1, n, m) && a[x][y+1]!='X' && !meglatogatott[x][y+1] )
        {
             md=Keres(x, y+1, n, m, a, meglatogatott);
             if (md!=-1 && md<minimum)
             {
                minimum=md;
                ok=true;
             }
        }


        if (Matrixban(x+1, y, n, m) && a[x+1][y]!='X' && !meglatogatott[x+1][y] )
        {
             md=Keres(x+1, y, n, m, a, meglatogatott);
        if (md!=-1 && md+1<minimum)
        {
                minimum=md+1;
                ok=true;
        }
        }

        if (Matrixban(x, y-1, n, m) && a[x][y-1]!='X' && !meglatogatott[x][y-1] )
        {
             md=Keres(x, y-1, n, m, a, meglatogatott);
        if (md!=-1 && md+2<minimum)
        {
                minimum=md+2;
                ok=true;
        }
        }

        if (Matrixban(x-1, y, n, m) && a[x-1][y]!='X' && !meglatogatott[x-1][y] )
        {
             md=Keres(x-1, y, n, m, a, meglatogatott);
        if (md!=-1 && md+3<minimum)
        {
                minimum=md+3;
                ok=true;
        }
        }

        if (ok)
            return minimum;
        else
            return -1;
    }

    if (a[x][y]=='N')
    {
        if (Matrixban(x-1, y, n, m) && a[x-1][y]!='X' && !meglatogatott[x-1][y] )
        {
             md=Keres(x-1, y, n, m, a, meglatogatott);
        if (md!=-1 && md<minimum)
        {
                minimum=md;
                ok=true;
        }
        }

        if (Matrixban(x, y+1, n, m) && a[x][y+1]!='X' && !meglatogatott[x][y+1] )
        {
             md=Keres(x, y+1, n, m, a, meglatogatott);
        if (md!=-1 && md+1<minimum)
        {
                minimum=md+1;
                ok=true;
        }
        }

        if (Matrixban(x+1, y, n, m) && a[x+1][y]!='X' && !meglatogatott[x+1][y] )
        {
            md=Keres(x+1, y, n, m, a, meglatogatott);
        if (md!=-1 && md+2<minimum)
        {
                minimum=md+2;
                ok=true;
        }
        }

        if (Matrixban(x, y-1, n, m) && a[x][y-1]!='X' && !meglatogatott[x][y-1] )
        {
             md=Keres(x, y-1, n, m, a, meglatogatott);
        if (md!=-1 && md+3<minimum)
        {
                minimum=md+3;
                ok=true;
        }
        }

        if (ok)
            return minimum;
        else
            return -1;
    }

    if (a[x][y]=='W')
    {
        if (Matrixban(x, y-1, n, m) && a[x][y-1]!='X' && !meglatogatott[x][y-1] )
        {
             md=Keres(x, y-1, n, m, a, meglatogatott);
        if (md!=-1 && md<minimum)
        {
                minimum=md;
                ok=true;
        }
        }

        if (Matrixban(x-1, y, n, m) && a[x-1][y]!='X' && !meglatogatott[x-1][y] )
        {
             md=Keres(x-1, y, n, m, a, meglatogatott);
        if (md!=-1 && md+1<minimum)
        {
                minimum=md+1;
                ok=true;
        }
        }

        if (Matrixban(x, y+1, n, m) && a[x][y+1]!='X' && !meglatogatott[x][y+1] )
        {
             md=Keres(x, y+1, n, m, a, meglatogatott);
        if (md!=-1 && md+2<minimum)
        {
                minimum=md+2;
                ok=true;
        }
        }

        if (Matrixban(x+1, y, n, m) && a[x+1][y]!='X' && !meglatogatott[x+1][y] )
        {
             md=Keres(x+1, y, n, m, a, meglatogatott);
        if (md!=-1 && md+3<minimum)
        {
                minimum=md+3;
                ok=true;
        }
        }

        if (ok)
            return minimum;
        else
            return -1;
    }

    if (a[x][y]=='S')
    {
        if (Matrixban(x+1, y, n, m) && a[x+1][y]!='X' && !meglatogatott[x+1][y] )
        {
             md=Keres(x+1, y, n, m, a, meglatogatott);
        if (md!=-1 && md<minimum)
        {
                minimum=md;
                ok=true;
        }
        }

        if (Matrixban(x, y-1, n, m) && a[x][y-1]!='X' && !meglatogatott[x][y-1] )
        {
             md=Keres(x, y-1, n, m, a, meglatogatott);
        if (md!=-1 && md+1<minimum)
        {
                minimum=md+1;
                ok=true;
        }
        }

        if (Matrixban(x-1, y, n, m) && a[x-1][y]!='X' && !meglatogatott[x-1][y] )
        {
             md=Keres(x-1, y, n, m, a, meglatogatott);
        if (md!=-1 && md+2<minimum)
        {
                minimum=md+2;
                ok=true;
        }
        }

        if (Matrixban(x, y+1, n, m) && a[x][y+1]!='X' && !meglatogatott[x][y+1] )
        {
             md=Keres(x, y+1, n, m, a, meglatogatott);
        if (md!=-1 && md+3<minimum)
        {
                minimum=md+3;
                ok=true;
        }
        }

        if (ok)
            return minimum;
        else
            return -1;
    }
   return -1;
}
int main()
{
    int n, m;
    cin>>n>>m;
    vector<vector<char>> a(n, vector<char>  (m));
    vector<vector<bool>> meglatogatott(n, vector<bool> (m));
    string s;
    for (int i=0; i<n; i++)
    {
        cin>>s;
        for (int j=0; j<m; j++)
        {
            a[i][j]=s[j];
            meglatogatott[i][j]=false;
        }

    }
    a[n-1][m-1]='A';


    cout<<Keres(0,0, n, m, a, meglatogatott);
    return 0;
}

Részfeladat Összpont Teszt Verdikt Idő Memória
subtask1 10/10
1 Elfogadva 3ms 1680 KiB
2 Elfogadva 3ms 1932 KiB
3 Elfogadva 3ms 2352 KiB
4 Elfogadva 3ms 2588 KiB
5 Elfogadva 3ms 2700 KiB
6 Elfogadva 3ms 2972 KiB
7 Elfogadva 3ms 3064 KiB
8 Elfogadva 3ms 3276 KiB
9 Elfogadva 3ms 3536 KiB
10 Elfogadva 3ms 3520 KiB
subtask2 12/12
1 Elfogadva 3ms 3520 KiB
2 Elfogadva 3ms 3948 KiB
3 Elfogadva 3ms 4328 KiB
4 Elfogadva 3ms 4244 KiB
5 Elfogadva 3ms 4268 KiB
6 Elfogadva 3ms 4304 KiB
7 Elfogadva 3ms 4304 KiB
8 Elfogadva 3ms 4256 KiB
9 Elfogadva 3ms 4404 KiB
10 Elfogadva 3ms 4460 KiB
subtask3 12/12
1 Elfogadva 3ms 4376 KiB
2 Elfogadva 3ms 4380 KiB
3 Elfogadva 3ms 4380 KiB
4 Elfogadva 3ms 4384 KiB
subtask4 0/16
1 Elfogadva 3ms 4388 KiB
2 Hibás válasz 3ms 4504 KiB
3 Hibás válasz 3ms 4540 KiB
4 Hibás válasz 3ms 4572 KiB
5 Hibás válasz 3ms 4708 KiB
6 Hibás válasz 3ms 4684 KiB
7 Hibás válasz 3ms 4640 KiB
8 Hibás válasz 3ms 4612 KiB
9 Hibás válasz 3ms 4804 KiB
10 Hibás válasz 3ms 4792 KiB
subtask5 0/50
1 Elfogadva 6ms 7040 KiB
2 Elfogadva 3ms 5828 KiB
3 Hibás válasz 6ms 8272 KiB
4 Elfogadva 4ms 6536 KiB
5 Hibás válasz 37ms 41152 KiB
6 Hibás válasz 37ms 40468 KiB
7 Elfogadva 8ms 23216 KiB
8 Hibás válasz 37ms 41512 KiB
9 Elfogadva 57ms 98892 KiB
10 Elfogadva 8ms 52208 KiB