zoukankan      html  css  js  c++  java
  • Codeforces 197D

    197D - Infinite Maze

    思路:bfs,如果一个点被搜到第二次,那么就是符合要求的。

    用vis[i][j].x,vis[i][j].y表示i,j(i,j是取模过后的值)这个点第一次被搜到的位置,用vis[(next.x%n+n)%n][(next.y%m+m)%m]标记,因为位置可以为负数(绝对值很大的负数)。

    代码:

    #include<bits/stdc++.h>
    using namespace std;
    const int N=1555;
    const int INF=0x3f3f3f3f;
    char Map[N][N];
    int n,m;
    int sx,sy;
    int dir[4][2]={0,1,1,0,0,-1,-1,0};
    struct node
    {
        int x,y;
    }vis[N][N];
    bool bfs(int x,int y)
    {
        node now,next;
        now.x=x;
        now.y=y;
        queue<node>q;
        q.push(now);
        while(!q.empty())
        {
            now=q.front();
            q.pop();
            for(int i=0;i<4;i++)
            {
                next.x=now.x+dir[i][0];
                next.y=now.y+dir[i][1];
                if(Map[(next.x%n+n)%n][(next.y%m+m)%m]!='#')
                {
                    if(vis[(next.x%n+n)%n][(next.y%m+m)%m].x==INF)
                    {
                        vis[(next.x%n+n)%n][(next.y%m+m)%m].x=next.x;
                        vis[(next.x%n+n)%n][(next.y%m+m)%m].y=next.y;
                        //cout<<next.x<<' '<<next.y<<endl;
                        q.push(next); 
                    }
                    else if(next.x!=vis[(next.x%n+n)%n][(next.y%m+m)%m].x||next.y!=vis[(next.x%n+n)%n][(next.y%m+m)%m].y)
                    {
                        return true;
                    }
                }
            }
        }
        return false;
    }
    int main()
    {
        ios::sync_with_stdio(false);
        cin.tie(0);
        memset(vis,INF,sizeof(vis));
        cin>>n>>m;
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<m;j++)
            {
                cin>>Map[i][j];
                if(Map[i][j]=='S')
                sx=i,sy=j;
            }
        }
        if(bfs(sx,sy))cout<<"Yes"<<endl;
        else cout<<"No"<<endl;
        return 0;
    }
  • 相关阅读:
    237. Delete Node in a Linked List
    430. Flatten a Multilevel Doubly Linked List
    707. Design Linked List
    83. Remove Duplicates from Sorted List
    160. Intersection of Two Linked Lists
    426. Convert Binary Search Tree to Sorted Doubly Linked List
    142. Linked List Cycle II
    类之间的关系
    初始化块
    明确类和对象
  • 原文地址:https://www.cnblogs.com/widsom/p/7210807.html
Copyright © 2011-2022 走看看