题意:
在一个正常的点可以净化该行该列的所有细胞,判断是否可以净化所有的细胞,并且输出所选的点。
思路:
如果可以的话,一定会选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; }