蒟蒻求助,死循环,不知道哪里写错了,大犇快来看看啊!
查看原帖
蒟蒻求助,死循环,不知道哪里写错了,大犇快来看看啊!
932569
I_AM_Nigger楼主2023/6/30 23:24
#include<bits/stdc++.h>
using namespace std;
int tx[8] = {0, 0,1,-1, 0,0,-1,1};
int ty[8] = {1,-1,0, 0,-1,1, 0,0};
int sx,sy,stowards;
char mp[110][110];
int vis[110][110];
int ans = INT_MAX;
int n,m;
int dfs(int x,int y,int money,int towards)
{
    if(mp[x][y] == 'F')
    {
        ans = min(ans,money);
        return 1;
    }
// cout << x << " " << y << " " << money << " " << towards << endl;
    bool f = 0;
    for(int i = 2;i<6;i++)
    {
        int nx = x + tx[i];int ny = y + ty[i];
        if(nx >= 0 && ny >= 0 && nx < n && ny < m && vis[nx][ny] == 0 && mp[nx][ny] != '.')
        {
            if(tx[i] == tx[towards] && ty[i] == ty[towards])
            {
                f = 1;
                vis[nx][ny] = 1;
                dfs(nx,ny,money,i);
                vis[nx][ny] = 0;
            }
            if(tx[i] == tx[towards+2] && ty[i] == ty[towards+2])
            {
                f = 1;
                vis[nx][ny] = 1;
                dfs(nx,ny,money+5,i);
                vis[nx][ny] = 0;
            }
            if(tx[i] == tx[towards-2] && ty[i] == ty[towards-2])
            {
                f = 1;
                vis[nx][ny] = 1;
                dfs(nx,ny,money+1,i);
                vis[nx][ny] = 0;
            }
        }
    }
    if(f == 0)
    {
        if(towards == 2)
        {
            vis[x-1][y] = 1;
            dfs(x-1,y,money+10,towards+1);    
            vis[x-1][y] = 0;
        }
        if(towards == 3)
        {
            vis[x+1][y] = 1;
            dfs(x+1,y,money+10,towards-1);
            vis[x+1][y] = 0;
        }
        if(towards == 4)
        {
            vis[x][y+1] = 1;
            dfs(x,y+1,money+10,towards+1);
            vis[x][y+1] = 0;
        }
        if(towards == 5)
        {
            vis[x][y-1] = 1;
            dfs(x,y-1,money+10,towards-1);
            vis[x][y-1] = 0;
        }
    }
    return 0;
}
int main()
{
    cin >> n >> m;
    for(int i = 1;i<=n;i++)
    {
        for(int j = 1;j<=m;j++)
        {
            cin >> mp[i][j];
            if(mp[i][j] == 'E')
            {
                sx = i;
                sy = j;
                stowards = 4;
            }
            if(mp[i][j] == 'W')
            {
                sx = i;
                sy = j;
                stowards = 3;
            }
            if(mp[i][j] == 'S')
            {
                sx = i;
                sy = j;
                stowards = 1;
            }
            if(mp[i][j] == 'N')
            {
                sx = i;
                sy = j;
                stowards = 2;
            }
        }
    }
    vis[sx][sy] = 1;
    dfs(sx,sy,0,stowards);
    cout << ans << endl;
    return 0;
}

995

2023/6/30 23:24
加载中...