首页 > 其他 > 详细

HDU5547

时间:2019-10-09 20:32:40      阅读:127      评论:0      收藏:0      [点我收藏+]

我的错误代码:待修改中

技术分享图片
#include<iostream>
#include<vector>
#include<cmath>
#include<cstring> 
using namespace std;
char mp[5][5];
int num[5][5];
vector<int> vec;
bool judge(){
     for(int i=0;i<4;i++) {
            if((num[i][0]+num[i][1]+num[i][2]+num[i][3]==49) && (num[0][i]+num[1][i]+num[2][i]+num[3][i]==49))continue;
            else return false;
    }
    
    int t[4][2] = {{0,0},{0,2},{2,0},{2,2}}; 
    for(int i=0;i<4;i++) {
        int x = t[i][0];
        int y = t[i][1];
        if(num[x][y]+num[x+1][y]+num[x][y+1]+num[x+1][y+1]==49) continue;
        else return false;
    }
    return true;
}
void solve(int step){
    if(step==vec.size()){
        if(judge()){
            for(int i=0;i<4;i++){
                for(int j=0;j<4;j++)
                    cout<<mp[i][j]; 
                cout<<endl;
            }
        } 
        return;
    }
    for(int i=1;i<=4;i++){
        bool same = false;
        int t = vec[step];
        int r=t/4, c=t%4;
        for(int j=0;j<4;j++){
            if((int)mp[r][j]-0==i||(int)mp[j][c]-0==i){same=true;break;}
        }
        if(same) continue;
        mp[r][c] = (char)(0+i);
        num[r][c] = i*pow(2,i-1);
        solve(step+1);
    }
}
int main()
{
    int t,cas = 1;
    cin>>t;
    while(t--){
        memset(num,0,sizeof(0));vec.clear();
        for(int i=0;i<4;i++){
            for(int j=0;j<4;j++){
                cin>>mp[i][j];
                if(mp[i][j]==*){
                    vec.push_back(i*4+j);
                }else{
                    num[i][j] = ((int)mp[i][j]-0)*pow(2,(double)mp[i][j]-0-1);
                } 
            }
        }
        printf("Case #%d:\n",cas++);
        solve(0);
    }
    return 0;
} 
View Code

 

HDU5547

原文:https://www.cnblogs.com/Lemon1234/p/11644034.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!