多了个空行,暴零了!!求调!!

P1219 [USACO1.5] 八皇后 Checker Challenge

SimonLan @ 2024-10-12 22:02:18

#include<bits/stdc++.h>
using namespace std;
bool flag=false;
int ans[1000],N,cnt=0,p=0;
bool check(int row,int col){
    for(int i=1;i<row;i++){
        if(ans[i]==col||abs(col-ans[i])==abs(row-i)){
            return false;
        }
    }   
    return true;
}
void dfs(int dep){
    if(dep>N){
        for(int i=1;i<=N;i++){
            if(p==3) break;
            cout<<ans[i]<<" ";
        }
        cnt++;
        p++; 
        flag=true;
        cout<<endl;
        return;
    }
    for(int i=1;i<=N;i++){
        if(check(dep,i)==true){
            ans[dep]=i;
            dfs(dep+1);
        }
    }
}
int main(){
    cin>>N;
    dfs(1);
    cout<<cnt;
    if(flag==false){
        cout<<"no solute!";
    }
}

正确输出

2 4 6 1 3 5
3 6 2 5 1 4
4 1 5 2 6 3
4

我的输出:

2 4 6 1 3 5
3 6 2 5 1 4
4 1 5 2 6 3

4

by lizeyang2013 @ 2024-10-19 10:15:41

你试试把换行删掉


by fjchiye @ 2024-10-24 10:46:36

你把你的代码改成这样

#include<bits/stdc++.h>
using namespace std;
bool flag=false;
int ans[1000],N,cnt=0,p=0;
bool check(int row,int col){
    for(int i=1;i<row;i++){
        if(ans[i]==col||abs(col-ans[i])==abs(row-i)){
            return false;
        }
    }   
    return true;
}
inline void print(){
    if(p<=2){
        for(int i=1;i<=N;i++){
            printf("%d ",ans[i]);
        }
        printf("\n");
    }
    p++;
}
void dfs(int dep){
    if(dep>N){
        /*
        for(int i=1;i<=N;i++){
            if(p==3) break;
            cout<<ans[i]<<" ";
        }
        cnt++;
        p++; 
        flag=true;
        cout<<endl;
        */
        print();
        return;
    }
    for(int i=1;i<=N;i++){
        if(check(dep,i)==true){
            ans[dep]=i;
            dfs(dep+1);
        }
    }
}
int main(){
    cin>>N;
    dfs(1);
    //cout<<cnt;
    cout<<p;
}

by luohaiyue @ 2024-11-15 20:11:13

@SimonLan 你试试把换行删掉


|