5444 2023. 06. 01 22:51:41 Timi Fantasztikus Kaland Nyílországban cpp14 Hibás válasz 34/100 48ms 99084 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=INT_MAX;
    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 1812 KiB
2 Elfogadva 3ms 2056 KiB
3 Elfogadva 3ms 2404 KiB
4 Elfogadva 3ms 2388 KiB
5 Elfogadva 3ms 2448 KiB
6 Elfogadva 3ms 2712 KiB
7 Elfogadva 3ms 2892 KiB
8 Elfogadva 3ms 3084 KiB
9 Elfogadva 3ms 3336 KiB
10 Elfogadva 3ms 3516 KiB
subtask2 12/12
1 Elfogadva 3ms 3608 KiB
2 Elfogadva 3ms 3664 KiB
3 Elfogadva 3ms 3752 KiB
4 Elfogadva 3ms 3824 KiB
5 Elfogadva 3ms 4100 KiB
6 Elfogadva 3ms 4044 KiB
7 Elfogadva 3ms 3968 KiB
8 Elfogadva 3ms 3912 KiB
9 Elfogadva 3ms 3928 KiB
10 Elfogadva 3ms 3980 KiB
subtask3 12/12
1 Elfogadva 2ms 3900 KiB
2 Elfogadva 3ms 4144 KiB
3 Elfogadva 3ms 4144 KiB
4 Elfogadva 3ms 4264 KiB
subtask4 0/16
1 Elfogadva 3ms 4392 KiB
2 Hibás válasz 3ms 4496 KiB
3 Hibás válasz 3ms 4876 KiB
4 Hibás válasz 3ms 4820 KiB
5 Hibás válasz 3ms 4928 KiB
6 Hibás válasz 3ms 4848 KiB
7 Hibás válasz 3ms 4788 KiB
8 Hibás válasz 3ms 4836 KiB
9 Hibás válasz 3ms 4860 KiB
10 Hibás válasz 3ms 4884 KiB
subtask5 0/50
1 Elfogadva 4ms 7212 KiB
2 Elfogadva 3ms 4884 KiB
3 Hibás válasz 6ms 8552 KiB
4 Elfogadva 4ms 5024 KiB
5 Hibás válasz 35ms 41528 KiB
6 Hibás válasz 34ms 40192 KiB
7 Elfogadva 8ms 5660 KiB
8 Hibás válasz 35ms 41796 KiB
9 Elfogadva 48ms 99084 KiB
10 Elfogadva 8ms 5560 KiB