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

    题目描述

    有一个仅由数字0与1组成的n×n格迷宫。若你位于一格0上,那么你可以移动到相邻4格中的某一格1上,同样若你位于一格1上,那么你可以移动到相邻4格中的某一格0上。

    你的任务是:对于给定的迷宫,询问从某一格开始能移动到多少个格子(包含自身)。

    输入输出格式

    输入格式:

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

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

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

    输出格式:

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

    #include<iostream>
    #include<cstdio>
    using namespace std;
    struct wz{
    	int x,y,z,bnt;
    }dl[160005];
    struct as{
    	int lt,tt;
    }ltt[1005][1005];;
    int a,b,c,d,i,j,k,l,m,n,tzz,s,t,cnt;
    char lk;
    void search(int ap,int bp)
    {
    	if(ltt[ap][bp].lt==1)
    	{
    		if(ap+1<=n)
    		{
    			if(ltt[ap+1][bp].lt==0&<t[ap+1][bp].tt==0)
    			{
    				cnt++;
    				ltt[ap+1][bp].tt=1;
    				search(ap+1,bp);
    			}
    		}
    		if(ap-1>=1)
    		{
    			if(ltt[ap-1][bp].lt==0&<t[ap-1][bp].tt==0)
    			{
    				cnt++;
    				ltt[ap-1][bp].tt=1;
    				search(ap-1,bp);
    			}
    		}
    		if(bp+1<=n)
    		{
    			if(ltt[ap][bp+1].lt==0&<t[ap][bp+1].tt==0)
    			{
    				cnt++;
    				ltt[ap][bp+1].tt=1;
    				search(ap,bp+1);
    			}	
    		}
    		if(bp-1>=1)
    		{
    			if(ltt[ap][bp-1].lt==0&<t[ap][bp-1].tt==0)
    			{
    				cnt++;
    				ltt[ap][bp-1].tt=1;
    				search(ap,bp-1);
    			}	
    		}
    		
    	}
    	if(ltt[ap][bp].lt==0)
    	{
    		if(ap+1<=n)
    		{
    			if(ltt[ap+1][bp].lt==1&<t[ap+1][bp].tt==0)
    			{
    				cnt++;
    				ltt[ap+1][bp].tt=1;
    				search(ap+1,bp);
    			}
    		}
    		if(ap-1>=1)
    		{
    			if(ltt[ap-1][bp].lt==1&<t[ap-1][bp].tt==0)
    			{
    				cnt++;
    				ltt[ap-1][bp].tt=1;
    				search(ap-1,bp);
    			}
    		}
    		if(bp+1<=n)
    		{
    			if(ltt[ap][bp+1].lt==1&<t[ap][bp+1].tt==0)
    			{
    				cnt++;
    				ltt[ap][bp+1].tt=1;
    				search(ap,bp+1);
    			}	
    		}
    		if(bp-1>=1)
    		{
    			if(ltt[ap][bp-1].lt==1&<t[ap][bp-1].tt==0)
    			{
    				cnt++;
    				ltt[ap][bp-1].tt=1;
    				search(ap,bp-1);
    			}	
    		}
    		
    	}
    }
    int main()
    {
    	cin>>n>>m;
    	for(a=1;a<=n;a++)
    	{
    		for(b=1;b<=n;b++)
    		{
    			cin>>lk;
    			if(lk=='0')
    			{
    				ltt[a][b].lt=0;
    			}
    			else
    			{
    				ltt[a][b].lt=1;
    			}
    		}
    	}
    	cnt=1;
    	for(a=1;a<=m;a++)
    	{
    		cin>>s>>t;
    		ltt[s][t].tt=1;
    		search(s,t);
    		cout<<cnt<<endl;
    		cnt=1;
    		for(c=1;c<=n;c++)
    		{
    			for(b=1;b<=n;b++)
    			{
    				ltt[c][b].tt=0;
    			}
    		}
    	}
    }


  • 相关阅读:
    121.买卖股票 求最大收益1 Best Time to Buy and Sell Stock
    409.求最长回文串的长度 LongestPalindrome
    202.快乐数 Happy Number
    459.(KMP)求字符串是否由模式重复构成 Repeated Substring Pattern
    326.是否为3的平方根 IsPowerOfThree
    231.是否为2的平方根 IsPowerOfTwo
    461.求两个数字转成二进制后的“汉明距离” Hamming Distance
    206.反转单链表 Reverse Linked List
    448. 数组中缺少的元素 Find All Numbers Disappeared in an Array
    常见表单元素处理
  • 原文地址:https://www.cnblogs.com/ztz11/p/9189994.html
Copyright © 2011-2022 走看看