UVa-227 - Puzzle

来源:互联网 发布:酒店系统数据库设计 编辑:程序博客网 时间:2024/05/01 22:20
#include<iostream>#include<cstdio>#include<cstring>using namespace std;void f(char a,int &xx,int &yy){    if(a=='A') xx=-1,yy=0;    else if(a=='B') xx=1,yy=0;    else if(a=='R') xx=0,yy=1;    else if(a=='L') xx=0,yy=-1;}int main(){    //freopen("in.txt","r",stdin);    //freopen("out.txt","w",stdout);    char a[10][10]={};    int cnt=0;    while(gets(a[1]+1)&&a[1][1]!='Z')    {        ++cnt;        if(cnt>1) printf("\n");        printf("Puzzle #%d:\n",cnt);        for(int i=2;i<=5;i++)            gets(a[i]+1);        int x,y;        for(int i=1;i<=5;i++)            for(int j=1;j<=5;j++)                if(a[i][j]==' ')                    x=i,y=j;        char b[100]={};        cin.getline(b,100,'0');        getchar();        bool flag=1;        for(int i=0;b[i]!='\0';i++)        {            if(b[i]=='\n') continue;            int xx=0,yy=0;            f(b[i],xx,yy);            if(a[x+xx][y+yy]=='\0')            {                flag=0;                printf("This puzzle has no final configuration.\n");                break;            }            char t=a[x+xx][y+yy];            a[x+xx][y+yy]=a[x][y];            a[x][y]=t;            x=x+xx,y=y+yy;        }        if(flag)        {            for(int i=1;i<=5;i++)            {                printf("%c",a[i][1]);                for(int j=2;j<=5;j++)                    printf(" %c",a[i][j]);                printf("\n");            }        }        memset(a,0,sizeof(a));    }}

上面的读取操作指令的方式是先全部存下来,下面是另外一种方法–一个一个字符地读。

#include<iostream>#include<cstdio>#include<cstring>using namespace std;void f(char a,int &xx,int &yy){    if(a=='A') xx=-1,yy=0;    else if(a=='B') xx=1,yy=0;    else if(a=='R') xx=0,yy=1;    else if(a=='L') xx=0,yy=-1;}int main(){    //freopen("in.txt","r",stdin);    //freopen("out.txt","w",stdout);    char a[10][10]={};    int cnt=0;    while(gets(a[1]+1)&&a[1][1]!='Z')    {        ++cnt;        if(cnt>1) printf("\n");        printf("Puzzle #%d:\n",cnt);        for(int i=2;i<=5;i++)            gets(a[i]+1);        int x,y;        for(int i=1;i<=5;i++)            for(int j=1;j<=5;j++)                if(a[i][j]==' ')                    x=i,y=j;        char b;        while(1)        {            b=getchar();            if(b=='0') break;            else if(b=='\n') continue;            int xx=0,yy=0;            f(b,xx,yy);            if(a[x+xx][y+yy]=='\0')            {                printf("This puzzle has no final configuration.\n");                break;            }            char t=a[x+xx][y+yy];            a[x+xx][y+yy]=a[x][y];            a[x][y]=t;            x=x+xx,y=y+yy;        }        if(b=='0')        {            for(int i=1;i<=5;i++)            {                printf("%c",a[i][1]);                for(int j=2;j<=5;j++)                    printf(" %c",a[i][j]);                printf("\n");            }        }        else while(getchar()!='0'){}        getchar();        memset(a,0,sizeof(a));    }}
0 0
原创粉丝点击