public class German {
boolean isSuccess=false;
enum country{ England , Sweden , Denmark , NorWay ,German};
enum color{Red,Yellow,White,Blue,Green};
enum drink{Tea,Milk,Beer,Caffy};
enum pet{Dog,Horse,Bird,Cat};
enum cigarette{Mall,DunHill,Master,Prince,Mix};
int[][] houseLink=new int[5][5];
boolean resovle1(){
for (int i=0;i<5;i++)
{
if (houseLink[0][i]==-1&&houseLink[1][i]==-1)
{
houseLink[0][i]=0;
houseLink[1][i]=0;
if (resovle2())
{
return true;
}
else{
houseLink[0][i]=-1;
houseLink[1][i]=-1;
for (int j=0;j<5;j++)
{
if (houseLink[0][j]==4&&houseLink[4][j]==3)
{
houseLink[0][j]=-1;
houseLink[4][j]=-1;
}
}/*当不成立时,还原德国人的值*/
}
}
}
return false;
}/*英国人住在红房子里*/
boolean resovle2(){
for (int i=0;i<5;i++)
{
if (houseLink[0][i]==-1&&houseLink[3][i]==-1)
{
houseLink[0][i]=1;
houseLink[3][i]=0;
if (resovle3())
{
return true;
}
else{
houseLink[0][i]=-1;
houseLink[3][i]=-1;
}
}
}
return false;
}/*瑞典人养了一条狗*/
boolean resovle3(){
for (int i=0;i<5;i++)
{
if (houseLink[0][i]==-1&&houseLink[2][i]==-1)
{
houseLink[0][i]=2;
houseLink[2][i]=0;
if (resovle4())
{
return true;
}
else{
houseLink[0][i]=-1;
houseLink[2][i]=-1;
}
}
}
return false;
}/*丹麦人喝茶*/
boolean resovle4(){
for (int i=0;i<4;i++)
{
if (houseLink[1][i]==-1&&houseLink[1][i+1]==-1)
{
houseLink[1][i]=4;
houseLink[1][i+1]=2;
if (resovle5())
{
return true;
}
else{
houseLink[1][i]=-1;
houseLink[1][i+1]=-1;
}
}
}
return false;
}/*绿房子在白房子左边*/
boolean resovle5(){
for (int i=0;i<4;i++)
{/*根据绿房子判断*/
//boolean isOriginal=false;
if (houseLink[1][i]==4&&houseLink[2][i]==-1)/*||houseLink[1][i]==-1*/
{
houseLink[2][i]=3;
if (resovle6())
{
return true;
}
else{
houseLink[2][i]=-1;
}
}
}
return false;
}/*绿房子主人喝咖啡*/
boolean resovle6(){
for (int i=0;i<5;i++)
{
if (houseLink[4][i]==-1&&houseLink[3][i]==-1)
{
houseLink[4][i]=0;
houseLink[3][i]=2;
if (resovle7())
{
return true;
}
else{
houseLink[4][i]=-1;
houseLink[3][i]=-1;
}
}
}
return false;
}/*抽PALL MALL烟的人养了一只鸟*/
boolean resovle7(){
for (int i=0;i<5;i++)
{
if (houseLink[1][i]==-1&&houseLink[4][i]==-1)
{
houseLink[1][i]=1;
houseLink[4][i]=1;
if (resovle11())
{
return true;
}
else{
houseLink[1][i]=-1;
houseLink[4][i]=-1;
}
}
}
return false;
}/*黄房子主人抽DUNHILL烟*/
void resovle8(){
houseLink[2][2]=1;
}
/*the Third 住在中间房子的人喝牛奶*/
void resovle9(){
houseLink[0][0]=3;
}/*The First confirm 挪威人住在第一间房子*/
boolean resovle10(){
for (int i=1;i<5;i++)
{
if (houseLink[4][i-1]==-1&&houseLink[3][i]==-1)
{
houseLink[4][i-1]=4;
houseLink[3][i]=3;
if (resovle13())
{
return true;
}
else{
houseLink[4][i-1]=-1;
houseLink[3][i]=-1;
}
}
}
for (int i=0;i<4;i++)
{
if (houseLink[4][i+1]==-1&&houseLink[3][i]==-1)
{
houseLink[4][i+1]=4;
houseLink[3][i]=3;
if (resovle13())
{
return true;
}
else{
houseLink[4][i+1]=-1;
houseLink[3][i]=-1;
}
}
}
return false;
}/*抽混合烟的人住在养猫人的旁边*/
boolean resovle11(){
for (int i=1;i<5;i++)
{
if (houseLink[3][i-1]==-1&&houseLink[4][i]==1)
{
houseLink[3][i-1]=1;
if (resovle12())
{
return true;
}
else{
houseLink[3][i-1]=-1;
}
}
}
for (int i=0;i<4;i++)
{
if (houseLink[3][i+1]==-1&&houseLink[4][i]==1)
{
houseLink[3][i+1]=1;
if (resovle12())
{
return true;
}
else{
houseLink[3][i+1]=-1;
}
}
}
return false;
}/*养马人住在抽DUNHILL烟的人旁边*/
boolean resovle12(){
for (int i=0;i<5;i++)
{
if (houseLink[2][i]==-1&&houseLink[4][i]==-1)
{
houseLink[2][i]=2;
houseLink[4][i]=2;
if (resovle10())
{
return true;
}
else{
houseLink[2][i]=-1;
houseLink[4][i]=-1;
}
}
}
return false;
}/*抽BLUE MASTER烟的人喝啤酒*/
boolean resovle13(){
for (int i=0;i<5;i++)
{
if (houseLink[0][i]==-1&&houseLink[4][i]==-1)
{
houseLink[0][i]=4;
houseLink[4][i]=3;
return true;
}
}
return false;
}/*德国人抽PRINCE烟*/
void resovle14(){
houseLink[1][1]=3;
}/*The Second Confirm 挪威人住在蓝房子旁*/
void search(){
long time=System.currentTimeMillis();
for(int i=0;i<5;i++){
for(int j=0;j<5;j++){
houseLink[j][i]=-1;
}
}
resovle9();
resovle14();
resovle8();
if(resovle1()){
isSuccess=true;
}
time=System.currentTimeMillis()-time;
if(isSuccess){
System.out.println("找到正确答案,下面是最终结果:(用时"+time+"毫秒)");
for (int i=0;i<5;i++)
{
for (int j=0;j<5;j++)
{
switch(i){
case 0:System.out.print(country.values()[houseLink[i][j]]+"/t");break;
case 1:System.out.print(color.values()[houseLink[i][j]]+"/t");break;
case 2:System.out.print((houseLink[i][j]>=0?drink.values()[houseLink[i][j]]:"NULL")+"/t");break;
case 3:System.out.print((houseLink[i][j]>=0?pet.values()[houseLink[i][j]]:"NULL")+"/t");break;
case 4:System.out.print(cigarette.values()[houseLink[i][j]]+"/t");break;
}
}
System.out.println("");
}
}
else System.out.println("没有找到答案,下面是最终结果:(用时"+time+"毫秒)");;
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
new German().search();
}
}