hdoj 1045 Fire Net 直接枚举 模拟就好了

来源:互联网 发布:用友软件u8下载 编辑:程序博客网 时间:2024/06/11 19:04

题目链接

直接枚举所有结果就可以了,

就是第一次模拟这样的数据 每个位置若没有阻挡物,存在着两种状态,一是有堡垒,二是空地。直接枚举就可以了。

自己的代码写的很繁琐,但是 首次想到了 将if(y>=n){x++,y=0}通过这项关键函数,就可以有序的枚举  从左往右 然后判断是否成立,若成立重新扫描一遍,得到堡垒是否最多。

自己第一次写的枚举代码 很是繁琐。

#include<stdio.h>#include<string.h>#include<math.h>#include<iostream>using namespace std;char a[10][10];char b[10][10];int sum=0,n;int MAX;int judge(){     int flag=1;     for(int i=0;i<n;i++){        for(int j=0;j<n;j++){            if(b[i][j]=='O'){                  int k=j;                  while(++k<n){                      if(b[i][k]=='.')continue;                      if(b[i][k]=='O'){                         flag=0;                         goto end;                                       }                                 if(b[i][k]=='X')break;                    }                       }                                }                          }     for(int i=0;i<n;i++){        for(int j=0;j<n;j++){            if(b[j][i]=='O'){                  int k=j;                  while(++k<n){                      if(b[k][i]=='.')continue;                      if(b[k][i]=='O'){                         flag=0;                         goto end;                                       }                                 if(b[k][i]=='X')break;                    }                       }                                }                          }     end:;     if(flag==1){        int sum=0;        for(int i=0;i<n;i++){           for(int j=0;j<n;j++)            if(b[i][j]=='O')sum++;                }                    return sum;              }     else return -1;     }void fun(int x,int y,char tmp){    if(y>=n){x++;y=0;}    if(a[x][y]=='X')b[x][y]='X';    else {       b[x][y]=tmp;       }         if( (x==n-1)&&(y==n-1)){       // for(int i=0;i<n;i++)       //    printf("%s\n",b)               int sum=judge();       if(MAX<sum){MAX=sum;}         return ;             }     fun(x,y+1,'O');    fun(x,y+1,'.');}int main(){    while(scanf("%d",&n)!=EOF){        if(n==0)break;        for(int i=0;i<n;i++)           scanf("%s",a[i]);        //O .        MAX=-1;        if(a[0][0]!='X'){            fun(0,0,'O');            fun(0,0,'.');        }        else {            fun(0,0,'O');             }           printf("%d\n",MAX);        }    return 0;    }


原创粉丝点击