1 solutions

  • 0
    @ 2021-11-27 11:32:13

    这题主要就是理解题意

    先把所有的路抽象处理形成一个矩阵,而每一个红绿灯就是一个障碍。

    即在绕过所有障碍的情况下,求起点到终点的路线总数

    #include<cstdio>
    #include<iostream>
    using namespace std;
    int n,m,t,sx,sy,fx,fy,ans;
    bool vis[10][10];//标记是否走过 
    bool mp[10][10];//标记是否有障碍 
    int Xx[]={1,0,-1,0};//x方向可以走的选择 
    int Yy[]={0,-1,0,1};//y方向可以走的选择 
    void dfs(int x,int y)
    {
        if(x==fx&&y==fy)//搜索终止的条件 
        {
            ans++;
            return;//返回 
        }
        for(int i=0;i<4;i++)//上下左右四个方向 
        {
            int dx=Xx[i]+x;
            int dy=Yy[i]+y;//下一个坐标 ,Xx[],Yy[]实现坐标的移动 
            if(dx>=1&&dx<=n&&dy>=1&&dy<=m&&!vis[dx][dy]&&!mp[dx][dy])//是否已走过&&是否有障碍 
            {
                vis[x][y]=1;//原先的标记为已走过 
                dfs(dx, dy);
                vis[x][y]=0;//回溯 
            }
        }
    }
    int main()
    {
        cin>>n>>m;
        cin>>t;
        while(t--)
        {
            int x,y;
            cin>>x>>y;
            mp[x][y]=1;
        }
        cin>>sx>>sy>>fx>>fy; 
        dfs(sx,sy);//从起点开始深搜 
        if(ans!=0)
        cout<<ans<<endl;
        else
        cout<<" BACK ON THE SAME WAY"<<endl;
        return 0;
    }
    

    Information

    ID
    181
    Time
    1000ms
    Memory
    256MiB
    Difficulty
    8
    Tags
    # Submissions
    184
    Accepted
    24
    Uploaded By