zoukankan      html  css  js  c++  java
  • 1629 01迷宫

    1629 01迷宫

     

     时间限制: 1 s
     空间限制: 256000 KB
     题目等级 : 钻石 Diamond
     
     
    题目描述 Description

    有一个由01组成的n*n格迷宫,若你位于一格0上,那么你可以移动到相邻4格中的某一格1上,同样若你位于一格1上,那么你可以移动到相邻4格中的某一格0上。那么对于给定的迷宫,询问从某一格开始能移动到多少格。

    输入描述 Input Description

    输入的第1行为两个正整数n,m。

    下面n行,每行n个字符,字符只可能是0或者1,字符之间没有空格。

    接下来m行,每行2个用空格分隔的正整数i,j,对应了迷宫中第i行第j列的一个0,询问从这一格开始能移动到多少格。

    输出描述 Output Description

    输出包括m行,对于每个询问输出答案。

    样例输入 Sample Input

    2 2

    01

    10

    1 1

    2 2

    样例输出 Sample Output

    4

    4

    数据范围及提示 Data Size & Hint

    【样例说明】

    所有格子互相可达。

    【数据规模】

    对于20%的数据,n≤10; 

    对于40%的数据,n≤50;

    对于50%的数据,m≤5;

    对于60%的数据,n≤100,m≤100;

    对于100%的数据,n≤1000,m≤1000000。

    分类标签 Tags 点此展开 

     
    暂无标签
    #include<cstdio>
    #include<iostream>
    #include<queue>
    using namespace std;
    #define N 1001
    int n,m,dx[]={1,0,0,-1},dy[]={0,1,-1,0};
    struct node{
        int x,y;
    }o,t;
    queue<node> q;
    char str[N];
    int a[N][N],vis[N][N],mem[N][N];
    inline void bfs(){
        for(int i=0;i<m;i++){
            cin>>o.x>>o.y;
            o.x--;o.y--;
            if(mem[o.x][o.y]){
                printf("%d
    ",mem[o.x][o.y]);continue;
            }
            int cnt=0;
            q.push(o);
            while(!q.empty()){
                o=q.front();
                for(int j=0;j<4;j++){
                    t.x=dx[j]+o.x;
                    t.y=dy[j]+o.y;
                    if(t.x<0||t.y<0||t.x>=n||t.y>=n);else
                    if(vis[t.x][t.y]!=-1&&a[t.x][t.y]+a[o.x][o.y]==1){//关键在这里 
                        vis[t.x][t.y]=-1;
                        q.push(t);
                        cnt++;
                    }
                }
                q.pop();
            }
            for(int i=0;i<n;i++)
                for(int j=0;j<n;j++)
                    if(vis[i][j]==-1)
                        vis[i][j]=0,
                        mem[i][j]=cnt;    
            if(cnt==0) cnt++;
            printf("%d
    ",cnt);
        }
    }
    int main(){
        cin>>n>>m;
        for(int i=0;i<n;i++){
            cin>>str;
            for(int j=0;j<n;j++)
                a[i][j]=str[j]-'0';
        }
        bfs();
        return 0;
    }
  • 相关阅读:
    手动执行把nconf生成的配置文件附加到nagios下
    创建django工程
    mysql安装、配置、导入数据库
    PHP里<?php和<?通用要在配置里怎么设置_百度知道
    Loganalyzer数据库乱码解决方法:
    RSyslog安装配置
    修改cacti的系统时间
    Mysql5.7.11 安装 cacti0.8.8f ,在导入cacti.sql数据库时出现下记错误,导致数据库导入终止: ERROR 1067 (42000) at line 1847: Invalid default value for 'status_fail_date'
    中间件组件
    cookie与session 组件
  • 原文地址:https://www.cnblogs.com/shenben/p/5573991.html
Copyright © 2011-2022 走看看