zoukankan      html  css  js  c++  java
  • zoj1002 Fire Net

    #include<iostream>
    #include<string>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    string map[5];
    int ANS,n;
    int wall[5][5],mark[5][5];
    bool check(int x,int y)
    {
          for(int i=x-1;i>=0;i--)
    	  {
    		  if(mark[i][y])return 0;
    		  if(wall[i][y])break;
    	  }
    	  for(int j=y-1;j>=0;j--)
    	  {
    		  if(mark[x][j])return 0;
    		  if(wall[x][j])break;
    	  }
    	  for(int i=x+1;i<n;i++)
    	  {
    		  if(mark[i][y])return 0;
    		  if(wall[i][y])break;
    	  }
    	  for(int j=y+1;j<n;j++)
    	  {
              if(mark[x][j])return 0;
    		  if(wall[x][j])break;
    	  }
    	  return 1;
    }
    void DFS(int num)
    {
    	if(ANS<num)ANS=num;
    	for(int i=0;i<n;i++)//相当于对每个格子进行全排列
    		for(int j=0;j<n;j++)	
    			if(!wall[i][j]&&!mark[i][j]&&check(i,j))
    			{
    				mark[i][j]=1;
    				DFS(num+1);	
    				mark[i][j]=0;
    			}
    }
    int main()
    {
    	
    	while(cin>>n&&n)
    	{
    		ANS=0;
    		memset(wall,0,sizeof(wall));
    		memset(mark,0,sizeof(mark));
    		for(int i=0;i<n;i++)
    		{
    			cin>>map[i];
    			for(int j=0;j<n;j++)
    				if(map[i][j]=='X')
    				{
    					wall[i][j]=1;
    				}
    		}
    		DFS(0);
    		cout<<ANS<<endl;
    	}
    }
    
    
  • 相关阅读:
    《研磨设计模式》阅读摘要
    心电图
    nodejs
    自动化测试
    Hook技术
    热修复原理
    理解ClassLoader
    Dalvik和ART
    Java虚拟机
    理解WindowManagerService
  • 原文地址:https://www.cnblogs.com/sook/p/2034691.html
Copyright © 2011-2022 走看看