[ create a new paste ] login | about

Link: http://codepad.org/QC9lvNB9    [ raw code | fork ]

iamyeasin - C++, pasted on Nov 30:
#include<bits/stdc++.h>

using namespace std;

int row[20],dig1[20],dig2[20],arr[20];

bool isSafe(int r,int c){
    if(row[r] || dig1[r+c] || dig2[8 + r-c]) return false;
    return true;
}

void placeQ(int c){
    for(int r=1; r<=8; r++){
        if(isSafe(r,c)){
            row[r] = dig1[r + c] = dig2[8 + r - c] = 1;
            return;
        }
    }
}


int main(){

    memset(dig1,0,sizeof dig1);
    memset(dig2,0,sizeof dig2);
    memset(row,0,sizeof row);

    while( scanf("%d",&arr[1]) != EOF){
        for(int i=2; i<=8; i++){
            cin >> arr[i];
            row[ arr[i] ]  = dig1[ i+arr[i] ] = dig2[ 8 + arr[i]-i ] = 0;
        }

        int counter = 0;
        for(int c=1; c<=8; c++){
            if( !isSafe(arr[c],c) ){
                counter++;
                row[c] = dig1[ c + arr[c] ] = dig2[ 8 + arr[c]-c ] = 0;
                placeQ(c);
            }
        }

        cout << counter << endl;



    }

    return 0;
}


Create a new paste based on this one


Comments: