读书人

poj4049 chess金华市邀请赛题

发布时间: 2012-10-14 14:55:08 作者: rapoo

poj4049 chess金华邀请赛题

竟然因为开的str数组为str[4][4],害我调试了一个小时,天呐~~~~

#include<iostream>#include<cstdlib>#include<stdio.h>#include<string.h>#include<string>using namespace std;char str[6][6];char ss[10];int change(int x,int y){    return (x-1)*4+y;}bool istrue(int x,int temp){    return (x&(1<<temp));}bool iswin(int x){    bool flag;    for(int i=1;i<=4;i++)    {        flag=true;        for(int j=1;j<=4;j++)        {          int temp=change(i,j);          if(!istrue(x,temp))          {flag=false;break;}        }        if(flag) return true;    }    for(int j=1;j<=4;j++)    {        flag=true;        for(int i=1;i<=4;i++)        {            int temp=change(i,j);            if(!istrue(x,temp)){flag=false;break;}        }        if(flag) return true;    }    flag=true;    for(int i=1;i<=4;i++)    {        int temp=change(i,i);        if(!istrue(x,temp)){flag=false;break;}    }    if(flag) return true;    flag=true;    for(int i=1;i<=4;i++)    {        int temp=change(5-i,i);        if(!istrue(x,temp)) {flag=false;break;}    }    if(flag) return true;    return false;}bool isWIN(int step,int x,int y,bool who){    if(iswin(x)) return true;    if(iswin(y)) return false;    if(step>=17) return false;    if(who)    {        for(int i=1;i<=16;i++)        {            if(!istrue(x,i)&&!istrue(y,i))            {                if(isWIN(step+1,x+(1<<i),y,false))                return true;            }        }        return false;    }    else    {        for(int i=1;i<=16;i++)        {            if(!istrue(x,i)&&!istrue(y,i))            {                if(!isWIN(step+1,x,y+(1<<i),true))                return false;///            }        }        return true;    }}bool islose(int step,int x,int y,bool who){    if(iswin(x)) return false;    if(iswin(y)) return true;    if(step>=17) return false;    if(who)    {        for(int i=1;i<=16;i++)        {            if(!istrue(x,i)&&!istrue(y,i))            {               // x|=(1<<i);                if(islose(step+1,x+(1<<i),y,false))                return true;            }        }        return false;    }    else    {        for(int i=1;i<=16;i++)        {            if(!istrue(x,i)&&!istrue(y,i))            {                //y|=(1<<i);                if(!islose(step+1,x,y+(1<<i),true))                return false;///            }        }        return true;    }}bool istie(int step,int x,int y,bool who){    if(iswin(x)) return false;    if(iswin(y)) return false;    if(step>=17) return true;    if(who)    {        for(int i=1;i<=16;i++)        {            if(!istrue(x,i)&&!istrue(y,i))            {               // x|=(1<<i);                if(istie(step+1,x+(1<<i),y,false))                return true;            }        }        return false;    }    else    {        for(int i=1;i<=16;i++)        {            if(!istrue(x,i)&&!istrue(y,i))            {               // y|=(1<<i);                if(!istie(step+1,x,y+(1<<i),true))///                return false;            }        }        return true;    }}bool solve(int sx,int sy){    int x=0;    int y=0;    if(sx==sy)    {        for(int i=1;i<=4;i++)        for(int j=1;j<=4;j++)        {            int temp=change(i,j);            if(str[i][j]=='x')            x|=1<<temp;            else if(str[i][j]=='o')            y|=1<<temp;        }    }    else    {        for(int i=1;i<=4;i++)        for(int j=1;j<=4;j++)        {            int temp=change(i,j);            if(str[i][j]=='o') x|=1<<temp;            else if(str[i][j]=='x') y|=1<<temp;        }    }    int step = sx+sy +1;    if(!strcmp(ss,"LOSE"))    {        return islose(step,x,y,true);    }    else if(!strcmp(ss,"WIN"))    {        return isWIN(step,x,y,true);    }    else if(!strcmp(ss,"TIE"))    {        return istie(step,x,y,true);    }}int main(){    int t;    scanf("%d",&t);    while(t--)    {        cin>>ss;        int sx=0;        int sy=0;        for(int i=1;i<=4;i++)        for(int j=1;j<=4;j++)        {            cin>>str[i][j];            if(str[i][j]=='x') sx++;            else if(str[i][j]=='o') sy++;        }        if(solve(sx,sy))        puts("YES");        else        puts("NO");    }}


1楼sun7545526昨天 20:36
软件大师告诉我们,程序要有注释,你的这个程序注释显的更为重要了
Re: qiqijianglu昨天 20:38
回复sun7545526n你可以直接说哪一行不懂,加注释不知从何加起~

读书人网 >编程

热点推荐