zoukankan      html  css  js  c++  java
  • P4961 小埋与扫雷

    Miku

    一个很简单的搜索

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    int n,m;
    int map[1001][1001];//地图 
    int vis[1001][1001]; 
    int id[1001][1001];//周围地雷的数量 
    int ans;
    int mx[9]={0,0,1,1,1,-1,-1,-1};
    int my[9]={1,-1,0,-1,1,0,-1,1};
    int k[1001][1001];//周围空格的数量 
    void dfs(int x,int y,int ii,int jj){
    	if(vis[x][y])
    	return ;
    	if(x<=0||y<=0||x>n||y>m)
    	return ;
    	vis[x][y]=1;
    	if(id[x][y]!=0){
    		return ;
    	}
    	if(map[x][y]==1){
    		return ;
    	}
    	for(int i=0;i<=8;++i){
    		dfs(x+mx[i],y+my[i],x,y);
    	}
    	return ;
    }
    int x;
    int main(){
    	scanf("%d%d",&n,&m);
    	for(int i=1;i<=n;++i)
    		for(int j=1;j<=m;++j){
    			scanf("%d",&map[i][j]);
    			if(map[i][j]==1)
    				for(int z=0;z<=8;++z)
    					id[i+mx[z]][j+my[z]]++;
    			else{
    				for(int z=0;z<=8;++z)
    					k[i+mx[z]][j+my[z]]++;
    			}
    	}
    	for(int i=1;i<=n;++i){
    		for(int j=1;j<=m;++j){
    			if(map[i][j]==1){
    					continue;	 
    			}else{
    				if(k[i][j]==0&&map[i][j]==0){
    					ans++;
    					continue;
    				}
    				if(vis[i][j])
    				continue;
    				if(id[i][j]==0){
    				dfs(i,j,i,j);
    				ans++;
    				}
    			}
    		}
    	}
    	for(int i=1;i<=n;++i){
    		for(int j=1;j<=m;++j){
    			if(!vis[i][j]&&map[i][j]==0){
    				ans++;
    			}
    		}
    	}
    	cout<<ans<<endl;
    	return 0;
    }
    
  • 相关阅读:
    软工个人阅读作业3
    阅读作业2
    代码复审
    pair project elevator
    读《移山之道——VSTS软件开发指南》
    软件工程作业--词频统计
    个人阅读作业3
    个人阅读作业2
    代码复审
    结对项目电梯吐血总结
  • 原文地址:https://www.cnblogs.com/For-Miku/p/13773962.html
Copyright © 2011-2022 走看看