转载请说明出处:http://blog.csdn.net/u013797947
本题的思路是使传教士们所占用的传教区域重叠,即找出每个传教士的对角线上还没被占用的点的数目最少。
代码如下:
//From Big Heart
//传教士
#include <iostream>
using namespace std;
int find_min(int i,int j);
void change(int i,int j);
int a[20][20];
int n,m; //4行3列
int main(){
int min_ = 400,i_=21,j_=21,timer = 0;
memset(a,0,sizeof(a));
cin >> n >> m;
bool isContinue = false;
do{
isContinue = false;
for(int i=0;i<m;i++)
for(int j=0;j<n;j++){
if(a[i][j] == 0){
isContinue = true;
int temp = find_min(i,j);
if(min_>temp){
min_ = temp;
i_=i,j_=j;
}
}
}
change(i_,j_);
timer++;
min_ = 400;
}while(isContinue);
cout<