題意:
在一個正常的點可以淨化該行該列的所有細胞,判斷是否可以淨化所有的細胞,並且輸出所選的點。
思路:
如果可以的話,一定會選n個點。 先判斷每一行是否有正常細胞,然後判斷每一列是否有,如果都沒有肯定不能淨化,然後輸出每一行或者每一列的第一個正常細胞的位置就好。
#include <iostream>#include <stdio.h>#include <string.h>using namespace std;int n ;char map[110][110];int main(){ cin>>n; int i , x[110] , y[110] , j; memset(x , 0 , sizeof(x)); memset(y , 0 , sizeof(y)); for(i = 0;i < n; i++ ) { cin>>map[i]; for(j = 0; j < n; j++) { if(map[i][j] == '.') { x[i] = 1; y[j] = 1; } } } int b = 0, c = 0; for(i = 0; i < n; i++) { if(x[i] == 0) b = 1; if(y[i] == 0) c = 1; } if(b&&c) { cout<<"-1"<<endl; return 0 ; } if(b == 0) { for(i = 0; i < n; i++) for(j = 0; j < n; j++) { if(map[i][j] == '.') { cout<<i+1<<" "<<j+1<<endl; break; } } return 0; } if(c == 0) { for(j = 0; j < n; j++) for(i = 0; i < n; i++) { if(map[i][j] == '.') { cout<<i+1<<" "<<j+1<<endl; break; } } } return 0;}