当前位置:编程学习 > C/C++ >>

九度教程第87题

C语言源码:
[cpp] 
#include<stdio.h>  
#define maxsize 10000000  
int queue[10000000][3];  
int mark[110][110][110];  
int main()  
{  
    int s,n,m,i,j,k,front,rear,flag,num,f;  
    scanf("%d %d %d",&s,&n,&m);  
    while(s||n||m)  
    {  
        for(i=0;i<110;i++)  
            for(j=0;j<110;j++)  
                for(k=0;k<110;k++)  
                    mark[i][j][k]=0;  
        front=0;  
        rear=1;  
        flag=1;  
        num=0;  
        f=-1;  
        queue[0][0]=s;  
        queue[0][1]=0;  
        queue[0][2]=0;  
        if(s%2==1)  
            printf("NO\n");  
        else  
        {  
            while(front!=rear)  
            {  
                i=queue[front][0];  
                j=queue[front][1];  
                k=queue[front][2];  
                front=(front+1)%maxsize;  
                if(mark[i][j][k]!=1)  
                {  
                    mark[i][j][k]=1;  
                    if((i==s/2&&j==s/2)||(i==s/2&&k==s/2)||(j==s/2&&k==s/2))  
                    {  
                        f=1;  
                        break;  
                    }  
                    if((i<=n-j)&&mark[0][j+i][k]==0)  
                    {  
                        queue[rear][0]=0;  
                        queue[rear][1]=j+i;  
                        queue[rear][2]=k;  
                        rear=(rear+1)%maxsize;  
                    }  
                    else if((i>n-j)&&(mark[i-(n-j)][n][k]==0))  
                    {  
                        queue[rear][0]=i-(n-j);  
                        queue[rear][1]=n;  
                        queue[rear][2]=k;  
                        rear=(rear+1)%maxsize;  
                    }  
                    if((i<=m-k)&&mark[0][j][k+i]==0)  
                    {  
                        queue[rear][0]=0;  
                        queue[rear][1]=j;  
                        queue[rear][2]=k+i;  
                        rear=(rear+1)%maxsize;  
                    }  
                    else if((i>m-k)&&(mark[i-(m-k)][j][m]==0))  
                    {  
                        queue[rear][0]=i-(m-k);  
                        queue[rear][1]=j;  
                        queue[rear][2]=m;  
                        rear=(rear+1)%maxsize;  
                    }  
                    if((j<=s-i)&&mark[i+j][0][k]==0)  
                    {  
                        queue[rear][0]=i+j;  
                        queue[rear][1]=0;  
                        queue[rear][2]=k;  
                        rear=(rear+1)%maxsize;  
                    }  
                    else if((j>s-i)&&(mark[s][j-(s-i)][k]==0))  
                    {  
                        queue[rear][0]=s;  
                        queue[rear][1]=j-(s-i);  
                        queue[rear][2]=k;  
                        rear=(rear+1)%maxsize;  
                    }  
                    if((j<=m-k)&&mark[i][0][k+j]==0)  
                    {  
           
补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,