5442 2023. 06. 01 21:46:49 Timi Fantasztikus Kaland Nyílországban cpp14 Hibás válasz 34/100 48ms 98428 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)
{
   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 1812 KiB
2 Elfogadva 3ms 2060 KiB
3 Elfogadva 3ms 2444 KiB
4 Elfogadva 3ms 2740 KiB
5 Elfogadva 3ms 2844 KiB
6 Elfogadva 3ms 2988 KiB
7 Elfogadva 3ms 2952 KiB
8 Elfogadva 3ms 2956 KiB
9 Elfogadva 3ms 3016 KiB
10 Elfogadva 3ms 3004 KiB
subtask2 12/12
1 Elfogadva 3ms 3052 KiB
2 Elfogadva 3ms 3372 KiB
3 Elfogadva 3ms 3704 KiB
4 Elfogadva 3ms 3616 KiB
5 Elfogadva 3ms 3648 KiB
6 Elfogadva 3ms 3680 KiB
7 Elfogadva 3ms 3916 KiB
8 Elfogadva 3ms 3860 KiB
9 Elfogadva 3ms 3868 KiB
10 Elfogadva 3ms 4144 KiB
subtask3 12/12
1 Elfogadva 3ms 4060 KiB
2 Elfogadva 3ms 4056 KiB
3 Elfogadva 3ms 4132 KiB
4 Elfogadva 3ms 4128 KiB
subtask4 0/16
1 Elfogadva 3ms 4136 KiB
2 Hibás válasz 3ms 4140 KiB
3 Hibás válasz 3ms 4340 KiB
4 Hibás válasz 3ms 4324 KiB
5 Hibás válasz 3ms 4392 KiB
6 Hibás válasz 3ms 4368 KiB
7 Hibás válasz 3ms 4328 KiB
8 Hibás válasz 3ms 4292 KiB
9 Hibás válasz 3ms 4296 KiB
10 Hibás válasz 3ms 4292 KiB
subtask5 0/50
1 Elfogadva 6ms 6504 KiB
2 Elfogadva 3ms 5292 KiB
3 Hibás válasz 6ms 7856 KiB
4 Elfogadva 4ms 6124 KiB
5 Hibás válasz 37ms 40828 KiB
6 Hibás válasz 35ms 40144 KiB
7 Elfogadva 8ms 22892 KiB
8 Hibás válasz 37ms 41244 KiB
9 Elfogadva 48ms 98428 KiB
10 Elfogadva 8ms 51748 KiB