Purification

来源:互联网 发布:大数据带来的实质变化 编辑:程序博客网 时间:2024/06/09 20:10

最少需要n次, 按行每行或者案列每列放一个, 如果不能存在就无解


#include <iostream>#include <cstring>#include <string>#include <cmath>#include <algorithm>#include <cstdio>#include <cstdlib>#include <vector>#define MAX 1005#define INF 1e8#define FOR(i, n) for(int i  = 0; i < n; i++)#define FORB(i, n) for(int i = n - 1; i >= 0; i--)#define MKPR(i, j) make_pair(i, j)using namespace std;int n;char s[MAX][MAX];void solve(){}int main(){    cin>>n;    getchar();    FOR(i, n){        gets(s[i]);    }    bool isFind  = true;    vector<pair<int, int> >ans;    FOR(i, n){//每行放一个        isFind =false;        FOR(j, n){            if( s[i][j] != 'E'){                isFind = true;                ans.push_back( MKPR(i + 1, j + 1) );                break;            }        }        if(isFind == false){            ans.clear();            break;        }    }    if(isFind){        int tn = ans.size();        FOR(i, tn)cout<<ans[i].first<<" "<<ans[i].second<<endl;        return 0;    }    FOR(j, n){        isFind = false;        FOR(i, n){            if(s[i][j] != 'E'){                isFind = true;//                cout<<i + 1<<" "<<j + 1<<endl;                ans.push_back(MKPR(i + 1, j + 1));                break;            }        }        if(isFind == false)break;    }    cout<<endl;    if(isFind){        int tn = ans.size();        FOR(i, tn){            cout<<ans[i].first<<" "<<ans[i].second<<endl;        }    }else {        puts("-1");    }    return 0;}