54432023-06-01 22:49:14TimiFantasztikus Kaland Nyílországbancpp14Hibás válasz 34/10057ms98892 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ÖsszpontTesztVerdiktIdőMemória
subtask110/10
1Elfogadva3ms1680 KiB
2Elfogadva3ms1932 KiB
3Elfogadva3ms2352 KiB
4Elfogadva3ms2588 KiB
5Elfogadva3ms2700 KiB
6Elfogadva3ms2972 KiB
7Elfogadva3ms3064 KiB
8Elfogadva3ms3276 KiB
9Elfogadva3ms3536 KiB
10Elfogadva3ms3520 KiB
subtask212/12
1Elfogadva3ms3520 KiB
2Elfogadva3ms3948 KiB
3Elfogadva3ms4328 KiB
4Elfogadva3ms4244 KiB
5Elfogadva3ms4268 KiB
6Elfogadva3ms4304 KiB
7Elfogadva3ms4304 KiB
8Elfogadva3ms4256 KiB
9Elfogadva3ms4404 KiB
10Elfogadva3ms4460 KiB
subtask312/12
1Elfogadva3ms4376 KiB
2Elfogadva3ms4380 KiB
3Elfogadva3ms4380 KiB
4Elfogadva3ms4384 KiB
subtask40/16
1Elfogadva3ms4388 KiB
2Hibás válasz3ms4504 KiB
3Hibás válasz3ms4540 KiB
4Hibás válasz3ms4572 KiB
5Hibás válasz3ms4708 KiB
6Hibás válasz3ms4684 KiB
7Hibás válasz3ms4640 KiB
8Hibás válasz3ms4612 KiB
9Hibás válasz3ms4804 KiB
10Hibás válasz3ms4792 KiB
subtask50/50
1Elfogadva6ms7040 KiB
2Elfogadva3ms5828 KiB
3Hibás válasz6ms8272 KiB
4Elfogadva4ms6536 KiB
5Hibás válasz37ms41152 KiB
6Hibás válasz37ms40468 KiB
7Elfogadva8ms23216 KiB
8Hibás válasz37ms41512 KiB
9Elfogadva57ms98892 KiB
10Elfogadva8ms52208 KiB