不知道为什么WA了,求大佬指点
  • 板块灌水区
  • 楼主zfznbnb
  • 当前回复19
  • 已保存回复19
  • 发布时间2023/1/12 22:00
  • 上次更新2023/10/24 04:31:21
查看原帖
不知道为什么WA了,求大佬指点
608251
zfznbnb楼主2023/1/12 22:00

感觉没什么问题,但是不知道为什么WA了,一直死循环,求大佬指点。

P1213时钟

代码如下:

#include<bits/stdc++.h>
using namespace std;
const int maxn=0x7fffffff;
int move[10][10]={
    {0,0,0,0,0,0,0,0,0,0},
    {0,1,1,0,1,1,0,0,0,0},
    {0,1,1,1,0,0,0,0,0,0},
    {0,0,1,1,0,1,1,0,0,0},
    {0,1,0,0,1,0,0,1,0,0},
    {0,0,1,0,1,1,1,0,1,0},
    {0,0,0,1,0,0,1,0,0,1},
    {0,0,0,0,1,1,0,1,1,0},
    {0,0,0,0,0,0,0,1,1,1},
    {0,0,0,0,0,1,1,0,1,1},
};//九种操作的改变状态(第一行和第一列忽略
int gre=27//最优操作次数;
int a[10];
int f[28],ope[28]//存放最优操作序列的数组,used[10]//这个操作进行过几次(同一种操作不能多于3次);
void search(int x,int p){
    int po=0;
    for(int i=1;i<=9;i++){
        po+=a[i];
    }
    if(po==0){
        for(int i=1;i<=27;i++){
            ope[i]=f[i];
        }
        gre=p;
        return;
    }//边界判断:是否均为12点(即a[i]均为0)
    for(int i=1;i<=9;i++){
        cout<<i;
        if(gre>p+1&&used[i]<3){
            //cout<<p<<" "<<i<<" ";
            int pre[10];
            f[p+1]=i;
            for(int j=1;j<=9;j++){
                pre[j]=a[j];
                a[j]=(a[j]+move[i][j])%4;
            }
            used[i]++;
            search(i,p+1);
            for(int j=1;j<=9;j++){
                a[j]=pre[j];
            }
            used[i]--;
        }
    }
}//dfs
int main(){
    for(int i=1;i<=9;i++){
        scanf("%d",&a[i]);
        a[i]=a[i]%4;
    }
    search(0,0);
    //for(int i=1;i<=9;i++)cout<<a[i]<<" ";
    for(int i=1;i<=gre;i++){
        cout<<ope[i];
    }
    return 0;
}
2023/1/12 22:00
加载中...