栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

zoj 1302 Ships

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

zoj 1302 Ships

#include<stdio.h>#include<string.h>#include<iostream>using namespace std;#define LL 20#define X 28 typedef struct pot{    int m;    int n;    bool is_various;    int x;    int y;    pot()    {        m=0;        n=0;        is_various=false;        x=0;        y=0;    }}pot,*pot_link;typedef struct grid{    int r;    int c;    pot val[LL][LL];    grid()    {        r=0;        c=0;    }}grid,*grid_link;char grids[500][LL][LL];int cnt=0;int used_grids[500]={0};char in_grid[LL][LL];grid pot_grid;int W=0,H=0;int R=0,C=0;int cases=0;int x_cnt=0;int o_cnt=0;int i_cnt=0;char patterns[19][10][10]={  {      "xx",      "xx"  },  {      "xx",      " xx"  },  {      " x",      "xx",      "x"  },  {      " xx",      "xx"  },  {      "x ",      "xx",      " x"  },  {      "x",      "xxx"  },  {      "xx",      "x",      "x"  },  {      "xxx",      "  x"  },  {      " x",      " x",      "xx"  },  {      " x ",      "xxx"  },  {      "x",      "xx",      "x"  },  {      "xxx",      " x"  },  {      " x",      "xx",      " x"  },  {      "  x",      "xxx"  },  {      "x",      "x",      "xx"  },  {      "xxx",      "x"  },  {      "xx",      " x",      " x"  },  {      "xxxx"  },  {      "x",      "x",      "x",      "x"  }};int kind_cnt[7]={1,2,2,4,4,4,2};int kind_ind[7]={0,1,3,5,9,13,17};int insert_grid(){    for(int i=0;i<=R-1;i++)    {        for(int j=0;j<=C-1;j++)        { if(in_grid[i][j]=='.') {grids[cnt][i][j]='o';} else if(in_grid[i][j]>=0&&in_grid[i][j]<=6) {grids[cnt][i][j]='x';} else {grids[cnt][i][j]=in_grid[i][j];}        }    }    cnt++;    if(cnt>=1000) {cnt--;}    return(0);}int DFS_kind(int cur){    if(x_cnt>28) {return(0);}    if(cnt>R*C) {return(-1);}    if(cur>=7)    {        int x_c=0;        for(int i=0;i<=R-1;i++)        { for(int j=0;j<=C-1;j++) {     if(in_grid[i][j]=='x'||(in_grid[i][j]>=0&&in_grid[i][j]<=6)) {x_c++;} }        }        if(x_c==28)        { insert_grid();        }    }    else    {        for(int k=0;k<=kind_cnt[cur]-1;k++)        { int pat_ind=kind_ind[cur]+k; for(int nexti=0;nexti<=R-1;nexti++) {     for(int nextj=0;nextj<=C-1;nextj++)     {         int i=0,j=0;         int match_cnt=0;         int pre_x[5]={0};         int pre_y[5]={0};         char pre_char[5]={0};         while(i<=4-1&&j<=4-1)         {  char ch=patterns[pat_ind][i][j];  if(ch!='')  {      if(ch=='x')      {          if(nexti+i>R-1||nextj+j>C-1) {break;}          if(in_grid[nexti+i][nextj+j]=='x'||in_grid[nexti+i][nextj+j]=='.')          {   if(in_grid[nexti+i][nextj+j]=='.') {x_cnt++;}   pre_x[match_cnt]=nexti+i;   pre_y[match_cnt]=nextj+j;   pre_char[match_cnt]=in_grid[nexti+i][nextj+j];   match_cnt++;   in_grid[nexti+i][nextj+j]=cur;          }          else {break;}      }  }  j++;  if(j>4-1)  {      j=0;      i++;  }         }         if(match_cnt==4)         {  int flag=DFS_kind(cur+1);  if(flag==-1) {return(-1);}         }         for(int ci=0;ci<=match_cnt-1;ci++) {in_grid[pre_x[ci]][pre_y[ci]]=pre_char[ci];if(pre_char[ci]=='.') {x_cnt--;}}     } }        }    }    return(0);}int constr_pot(){    for(int c=0;c<=cnt-1;c++)    {        for(int i=0;i<=R-1;i++)        { for(int j=0;j<=C-1;j++) {     if(grids[c][i][j]=='x') {pot_grid.val[i][j].n++;}     else {pot_grid.val[i][j].m++;} }        }    }    for(int i=0;i<=R-1;i++)    {        for(int j=0;j<=C-1;j++)        { if(pot_grid.val[i][j].m>0&&pot_grid.val[i][j].n>0) {pot_grid.val[i][j].is_various=true;}        }    }    return(0);}int sub_grids(pot min_m,char ch,int cur){    for(int c=0;c<=cnt-1;c++)    {        if(!used_grids[c]&&grids[c][min_m.x][min_m.y]==ch)        { used_grids[c]=cur; for(int i=0;i<=R-1;i++) {     for(int j=0;j<=C-1;j++)     {         if(grids[c][i][j]=='x') {pot_grid.val[i][j].n--;}         else {pot_grid.val[i][j].m--;}         if(!(pot_grid.val[i][j].m>0&&pot_grid.val[i][j].n>0)) {pot_grid.val[i][j].is_various=false;}     } }        }    }    return(0);}int add_grids(int cur){    for(int c=0;c<=cnt-1;c++)    {        if(used_grids[c]==cur)        { used_grids[c]=0; for(int i=0;i<=R-1;i++) {     for(int j=0;j<=C-1;j++)     {         if(grids[c][i][j]=='x') {pot_grid.val[i][j].n++;}         else {pot_grid.val[i][j].m++;}         if(pot_grid.val[i][j].m>0&&pot_grid.val[i][j].n>0) {pot_grid.val[i][j].is_various=true;}     } }        }    }    return(0);}int DFS_pot(int cur,int use_o){    if(use_o>=2) {return(0);}    pot min_m;    int flag=0;    int mark=0;    min_m.m=1000;    for(int i=0;i<=R-1;i++)    {        for(int j=0;j<=C-1;j++)        { if(pot_grid.val[i][j].is_various) {     flag=1;     if(pot_grid.val[i][j].m<min_m.m)     {         min_m.m=pot_grid.val[i][j].m;         min_m.n=pot_grid.val[i][j].n;         min_m.x=i;         min_m.y=j;     } }        }    }    if(!flag) {return(1);}    sub_grids(min_m,'x',cur);    mark=DFS_pot(cur+1,use_o+1);    if(!mark) {return(0);}    add_grids(cur);    sub_grids(min_m,'o',cur);    mark=DFS_pot(cur+1,use_o);    if(!mark) {return(0);}    add_grids(cur);    return(1);}int main(){    while(scanf("%d%d",&H,&W)!=EOF&&(W+H)>0)    {        R=H;        C=W;        cnt=0;        x_cnt=o_cnt=i_cnt=0;        pot_grid.r=R;        pot_grid.c=C;        memset(grids,'',sizeof(grids));        memset(used_grids,0,sizeof(used_grids));        for(int i=0;i<=R-1;i++)        { for(int j=0;j<=C-1;j++) {     pot_grid.val[i][j].is_various=false;     pot_grid.val[i][j].m=pot_grid.val[i][j].n=pot_grid.val[i][j].x=pot_grid.val[i][j].y=0; }        }        printf("Game #%dn",++cases);        for(int i=0;i<=R-1;i++)        { scanf("%s",in_grid[i]); for(int j=0;j<=C-1;j++) {     switch(in_grid[i][j])     {     case 'x':         x_cnt++;         break;     case 'o':         o_cnt++;         break;     case '.':         i_cnt++;         break;     } }        }        if(x_cnt>28)        { printf("no.nn"); continue;        }        DFS_kind(0);        constr_pot();        if(cnt>0&&cnt<=R*C&&DFS_pot(1,0)) printf("yes.nn");        else printf("no.nn");    }    return(0);}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/369395.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号