#include <iostream>
#include <vector>
using namespace std;
int states[6][6];
int ct=0;
int flag=0;
class drop
{
public:
drop(int x,int y,int d1,int d2)
{
position_x = x;
position_y = y;
direction[0] = d1;
direction[1] = d2;
}
void move()
{
position_x+=direction[0];
position_y+=direction[1];
}
int x()
{
return position_x;
}
int y()
{
return position_y;
}
private:
int position_x;
int position_y;
int direction[2];
};
vector<drop> dr;
vector<drop> temp;
void Print(int i,int j)
{
cout<<ct<<endl;
cout<<i<<" "<<j<<endl;
for(int k=0;k<=5;k++)
{
cout<<states[k][0]<<" "<<states[k][1]<<" "<<states[k][2]<<" "\
<<states[k][3]<<" "<<states[k][4]<<" "<<states[k][5]<<" "<<endl;
}
}
void creatdrops(int i,int j)
{
drop dp1(i,j,-1,0);
drop dp2(i,j,0,-1);
drop dp3(i,j,0,1);
drop dp4(i,j,1,0);
dr.push_back(dp1);
dr.push_back(dp2);
dr.push_back(dp3);
dr.push_back(dp4);
states[i][j]=0;
}
void dropsclick(int x,int y,vector<drop>::iterator p)
{
states[x][y]++;
if(states[x][y]==5)
{
drop dp1(x,y,-1,0);
drop dp2(x,y,0,-1);
drop dp3(x,y,0,1);
drop dp4(x,y,1,0);
temp.push_back(dp1);
temp.push_back(dp2);
temp.push_back(dp3);
temp.push_back(dp4);
states[x][y]=0;
}
dr.erase(p);
}
int compare()
{
int n=0;
for(int i=0;i<=5;i++)
for(int j=0;j<=5;j++)
{
if(states[i][j]==0)
{
n++;
}
}
return n;
}
void adddrop(int x,int y)
{
int state[6][6];
ct++;
for(int k=0;k<=5;k++)
{
state[k][0]=states[k][0];
state[k][1]=states[k][1];
state[k][2]=states[k][2];
state[k][3]=states[k][3];
state[k][4]=states[k][4];
state[k][5]=states[k][5];
}
states[x][y]++;
if(states[x][y]==5)
{
creatdrops(x,y);
while(!dr.empty())
{
for(vector<drop>::iterator iter=dr.begin();iter!=dr.end();iter++)
{
iter->move();
}
for(vector<drop>::iterator iter=dr.begin();iter!=dr.end();iter++)
{
if(iter->x()<0 || iter->x()>5 || iter->y()<0 || iter->y()>5)
{
dr.erase(iter);
iter--;
}
else if(states[iter->x()][iter->y()]!=0)
{
dropsclick(iter->x(),iter->y(),iter);
iter--;
}
}
dr.insert(dr.end(),temp.begin(),temp.end());
temp.clear();
}
}
if(compare()==36)
{
flag=1;
}
if(flag!=1&&ct!=6)
{
for(int i=0;i<=5;i++)
{
for(int j=0;j<=5;j++)
{
if(flag!=1&&states[i][j]>0)
{
adddrop(i,j);
}
}
}
}
if(flag==1)
{
cout<<ct<<endl;
cout<<x+1<<" "<<y+1<<endl;
}
for(int k=0;k<=5;k++)
{
states[k][0]=state[k][0];
states[k][1]=state[k][1];
states[k][2]=state[k][2];
states[k][3]=state[k][3];
states[k][4]=state[k][4];
states[k][5]=state[k][5];
}
ct--;
}
int main()
{
for(int k=0;k<=5;k++)
{
cout<<"请输入第 "<<k+1<<" 行:";
cin>>states[k][0]>>states[k][1]>>states[k][2]
>>states[k][3]>>states[k][4]>>states[k][5];
}
for(int i=0;i<=5;i++)
{
for(int j=0;j<=5;j++)
{
if(flag!=1&&states[i][j]!=0)
{
adddrop(i,j);
}
}
}
}
转载于:https://www.cnblogs.com/moupeng/archive/2010/12/15/1907397.html