zoukankan      html  css  js  c++  java
  • 九宫幻方

    记录好缺少部分的坐标,用next_permutation进行穷举,就可以得到答案了

    #include <stdio.h>
    #include <memory.h>
    #include <math.h>
    #include <string>
    #include <string.h>
    #include <vector>
    #include <set>
    #include <stack>
    #include <queue>
    #include <algorithm>
    #include <map>
    
    #define I scanf
    #define OL puts
    #define O printf
    #define F(a,b,c) for(a=b;a<c;a++)
    #define FF(a,b) for(a=0;a<b;a++)
    #define FG(a,b) for(a=b-1;a>=0;a--)
    #define LEN 3000
    #define MAX 0x06FFFFFF
    #define V vector<int>
    
    using namespace std;
    
    int mat[3][3];
    
    bool isOK(){
        int i,j,sum=0;
        for(i=0;i<3;i++){
            sum=0;
            for(j=0;j<3;j++){
                sum+=mat[i][j];
            }
            if(sum!=15) return false;
        }
        for(i=0;i<3;i++){
            sum=0;
            for(j=0;j<3;j++){
                sum+=mat[j][i];
            }
            if(sum!=15) return false;
        }
        sum=0;
        for(i=0;i<3;i++) sum+=mat[i][i];
        if(sum!=15) return false;
        sum=0+mat[2][0]+mat[1][1]+mat[0][2];
        if(sum!=15) return false;
        return true;
    }
    
    int main(){
    //    freopen("D:/CbWorkspace/blue_bridge/九宫幻方.txt","r",stdin);
        vector<int> kx,ky,num;
        int cnt=0;
        int hash[11]={0};
        int ans[3][3];
        int i,j;
        for(i=0;i<3;i++){
            for(j=0;j<3;j++){
                I("%d",&mat[i][j]);
                if(!mat[i][j]){
                    kx.push_back(i);
                    ky.push_back(j);
                }
                hash[mat[i][j]]++;
            }
        } 
        for(int i=1;i<=9;i++) if(!hash[i]) num.push_back(i);
        do{
            for(i=0;i<kx.size();i++){
                mat[kx[i]][ky[i]]=num[i];
            }
            if(isOK()){
                FF(i,3)FF(j,3)ans[i][j]=mat[i][j];
                cnt++;
                if(cnt>=2) break;
            }
        }while(next_permutation(num.begin(),num.end()));
        if(cnt>=2){
            puts("Too Many");
        }else{
            FF(i,3){
                FF(j,3){
                    printf("%d",ans[i][j]);
                    if(j!=2) printf(" ");
                }
                puts("");
            } 
        }
        return 0;
    }
  • 相关阅读:
    SAP CRM One Order函数CRM_Object_FILL_OW的设计原理
    SAP CRM One Order函数CHANGE_OW的设计原理
    SAP CRM One Order函数SAVE_EC的设计原理
    POJ-1125 Stockbroker Grapevine
    GStreamer 1.0 series序列示例
    H265与ffmpeg改进开发
    FFmpeg扩展开发
    在Yolov5 Yolov4 Yolov3 TensorRT 实现Implementation
    TensorRT 基于Yolov3的开发
    大规模数据处理Apache Spark开发
  • 原文地址:https://www.cnblogs.com/TQCAI/p/8458061.html
Copyright © 2011-2022 走看看