凡事从积极的态度做起
记述技术(Web/BI/biztalk infopath/sharepoint)、人、事

c#代码:使用假设的方法遍历解决“谁养鱼”问题(据说是爱因斯坦所出的一道推理题)

星期五, 20 六月 2008 17:26 by cleo

求解:"谁养鱼"(爱因斯坦所出的一道推理题)


1、在一条街上,有5座房子,喷了5种颜色。
2、每个房里住着不同国籍的人
3、每个人喝不同的饮料,抽不同品牌的香烟,养不同的宠物
问题是:谁养鱼?
提示:
1、英国人住红色房子
2、瑞典人养狗
3、丹麦人喝茶
4、绿色房子在白色房子左面
5、绿色房子主人喝咖啡
6、抽Pall Mall 香烟的人养鸟
7、黄色房子主人抽Dunhill 香烟
8、住在中间房子的人喝牛奶
9、 挪威人住第一间房
10、抽Blends香烟的人住在养猫的人隔壁
11、养马的人住抽Dunhill 香烟的人隔壁
12、抽Blue Master的人喝啤酒
13、德国人抽Prince香烟
14、挪威人住蓝色房子隔壁
15、抽Blends香烟的人有一个喝水的邻居
爱因斯坦在20世纪初出的这个谜语。他说世界上有98%的人答不出

 

解决思路:

  1. 使用数组保存当前的推理状态
  2. 一次验证每个提示
  3. 对于有多种可能的提示,将所有的假设状态放入一个队列保存起来。并且给出该状态所需要验证的下一个提示是哪一个。
  4. 从队列取出场景状态,继续验证下一个提示
  5. 如果能通过每一个提示,即为答案。

设计:

fish

关键点:

  1. 保存状态时候不能仅仅使用clone保存一个浅层副本。
  2. 	public Scene(int step,House[] MyHouse)
    	
    	        {
    	
    	            Step = step;
    	
    	 
    	
    	            this.MyHouse = (House[])MyHouse.Clone();
    	
    	            this.MyHouse[0] = this.MyHouse[0].clone();
    	
    	            this.MyHouse[1] = this.MyHouse[1].clone();
    	
    	            this.MyHouse[2] = this.MyHouse[2].clone();
    	
    	            this.MyHouse[3] = this.MyHouse[3].clone();
    	
    	            this.MyHouse[4] = this.MyHouse[4].clone();
    	
    	 
    	
    	        }
    	

 

 

可能可以优化算法的地方:

  1. continueGo函数的调度机制,使用Switch,比较丑陋
  2. 15条规则,是否可以使用更加通用的表示方法

 

大家讨论讨论,砖抛出来了,玉儿快出来吧。

 

 

 

 

源代码(全文):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
 
namespace ConsoleAppFish
{
//求解:"谁养鱼"(爱因斯坦所出的一道推理题)
//1、在一条街上,有5座房子,喷了5种颜色。
//2、每个房里住着不同国籍的人
//3、每个人喝不同的饮料,抽不同品牌的香烟,养不同的宠物
//问题是:谁养鱼?
//提示:
//1、英国人住红色房子
//2、瑞典人养狗
//3、丹麦人喝茶
//4、绿色房子在白色房子左面
//5、绿色房子主人喝咖啡
//6、抽Pall Mall 香烟的人养鸟
//7、黄色房子主人抽Dunhill 香烟
//8、住在中间房子的人喝牛奶
//9、 挪威人住第一间房
//10、抽Blends香烟的人住在养猫的人隔壁
//11、养马的人住抽Dunhill 香烟的人隔壁
//12、抽Blue Master的人喝啤酒
//13、德国人抽Prince香烟
//14、挪威人住蓝色房子隔壁
//15、抽Blends香烟的人有一个喝水的邻居
//爱因斯坦在20世纪初出的这个谜语。他说世界上有98%的人答不出
 
    class Program
    {
         
        static Queue<Scene> myScene = new Queue<Scene>();
        static int Counter  = 0;
 
        static void Main(string[] args)
        {
            setRule1();
 
            while (myScene.Count > 0)
            {
                continueGo();
            }
        }        
 
        static private void GetFish(Scene SceneNow)
        {
            Console.WriteLine(SceneNow.ToString());
            Debug.Write(SceneNow.ToString());
            //Debug.Write(Counter);
        }
 
        static private void continueGo()
        {
            Scene SceneNow = myScene.Dequeue();
            //Debug.Write(SceneNow.Step);
            Counter++;
 
           switch (SceneNow.Step)
           {
               case 2:
                   {
                       setRule2(SceneNow);
                       break;
                   }
               case 3:
                   {
                       setRule3(SceneNow);
                       break;
                   }
               case 4:
                   {
                       setRule4(SceneNow);
                       break;
                   }
               case 5:
                   {
                       setRule5(SceneNow);
                       break;
                   }
               case 6:
                   {
                       setRule6(SceneNow);
                       break;
                   }
               case 7:
                   {
                       setRule7(SceneNow);
                       break;
                   }
               case 8:
                   {
                       setRule8(SceneNow);
                       break;
                   }
               case 9:
                   {
                       setRule9(SceneNow);
                       break;
                   }
               case 10:
                   {
                       setRule10(SceneNow);
                       break;
                   }
               case 11:
                   {
                       setRule11(SceneNow);
                       break;
                   }
               case 12:
                   {
                       setRule12(SceneNow);
                       break;
                   }
               case 13:
                   {
                       setRule13(SceneNow);
                       break;
                   }
               case 14:
                   {
                       setRule14(SceneNow);
                       break;
                   }
               case 15:
                   {
                       setRule15(SceneNow);
                       break;
                   }
 
               default:
                   { 
                       GetFish(SceneNow);
                       break;
                   }
           }
        }
 
        static private bool setRule1()
        {//1、英国人住红色房子
           House[] MyHouse =   { new House(1), new House(2), new House(3), new House(4), new House(5) };
 
           Scene s1 = new Scene(2, MyHouse);
           s1.MyHouse[0].nationalities = nationalities.英国;
           s1.MyHouse[0].HouseColor = HouseColor.红色;            
            myScene.Enqueue(s1);
 
            s1 = new Scene(2, MyHouse);
            s1.MyHouse[1].nationalities = nationalities.英国;
            s1.MyHouse[1].HouseColor = HouseColor.红色;           
            myScene.Enqueue(s1);
 
            s1 = new Scene(2, MyHouse);
            s1.MyHouse[2].nationalities = nationalities.英国;
            s1.MyHouse[2].HouseColor = HouseColor.红色;            
            myScene.Enqueue(s1);
 
            s1 = new Scene(2, MyHouse);
            s1.MyHouse[3].nationalities = nationalities.英国;
            s1.MyHouse[3].HouseColor = HouseColor.红色;           
            myScene.Enqueue(s1);
 
            s1 = new Scene(2, MyHouse);
            s1.MyHouse[4].nationalities = nationalities.英国;
            s1.MyHouse[4].HouseColor = HouseColor.红色;           
            myScene.Enqueue (s1);
 
            return true;
        }
        static private bool setRule2(Scene SceneNow)
        {//2、瑞典人养狗
 
            if (SceneNow.MyHouse.Where(h => h.nationalities == nationalities.瑞典).Count() == 0)
            {
                for (int i = 0; i <= 4; i++)
                {
                    if (SceneNow.MyHouse[i].nationalities == nationalities.Null)
                    {
                        Scene s1 = new Scene(2, SceneNow.MyHouse); //还是回到这一步
                        s1.MyHouse[i].nationalities = nationalities.瑞典;
 
                        myScene.Enqueue(s1);
                    }
                }
            }
            else
            {//已经有了 , 
                int number = SceneNow.MyHouse.Single(h => h.nationalities == nationalities.瑞典).Number;
                if (SceneNow.MyHouse[number - 1].pet == pet.Null ||
                        SceneNow.MyHouse[number - 1].pet == pet.狗)
                {
                    Scene s1 = new Scene(3, SceneNow.MyHouse);
                    s1.MyHouse[number - 1].pet = pet.狗;
                    myScene.Enqueue(s1);
                }
            }
            
            return true;
        }
        static private bool setRule3(Scene SceneNow)
        {//3、丹麦人喝茶
 
            if (SceneNow.MyHouse.Where(h => h.nationalities == nationalities.丹麦).Count() == 0)
            { 
                for (int i = 0; i <= 4; i++)
                {
                    if (SceneNow.MyHouse[i].nationalities == nationalities.Null)
                    {
                        Scene s1 = new Scene(3, SceneNow.MyHouse); //还是回到这一步
                        s1.MyHouse[i].nationalities = nationalities.丹麦;
 
                        myScene.Enqueue(s1);
                    }
                }
            }
            else
            {//已经有了 , 
                int number = SceneNow.MyHouse.Single(h => h.nationalities == nationalities.丹麦).Number;
                if (SceneNow.MyHouse[number - 1].brink == brink.Null ||
                        SceneNow.MyHouse[number - 1].brink == brink.茶)
                {
                    Scene s1 = new Scene(4, SceneNow.MyHouse);
                    s1.MyHouse[number - 1].brink = brink.茶;
                    myScene.Enqueue(s1);
                }
            }
 
           
            return true;
        }
        static private bool setRule4(Scene SceneNow)
        {//4.绿色房子在白色房子左面
 
            //先判断有无 白色,如果没有假设一个,在设为 隔壁旁边 为 绿色(因为左右其实是不能区分的其实和隔壁是同义词)
 
            if (SceneNow.MyHouse.Where(h => h.HouseColor == HouseColor.白色).Count() == 0)
            {//还没有人抽Blends
                for (int i = 0; i <= 4; i++)
                {
                    if (SceneNow.MyHouse[i].HouseColor == HouseColor.Null)
                    {
                        Scene s1 = new Scene(4, SceneNow.MyHouse); //还是回到这一步
                        s1.MyHouse[i].HouseColor = HouseColor.白色;
 
                        myScene.Enqueue(s1);
                    }
                }
            }
            else
            {//已经有了 ,设置为 绿色
                int number = SceneNow.MyHouse.Single(h => h.HouseColor == HouseColor.白色).Number;
 
                if (number > 1)
                {//左边
                    if (SceneNow.MyHouse[number - 1 - 1].HouseColor == HouseColor.Null || SceneNow.MyHouse[number - 1 - 1].HouseColor == HouseColor.绿色)
                    {
                        Scene s1 = new Scene(5, SceneNow.MyHouse);
                        s1.MyHouse[number - 1 - 1].HouseColor = HouseColor.绿色;
                        myScene.Enqueue(s1);
                    }
                }
                if (number < 5)
                {//右边
                    if (SceneNow.MyHouse[number + 1 - 1].HouseColor == HouseColor.Null || SceneNow.MyHouse[number + 1 - 1].HouseColor == HouseColor.绿色)
                    {
                        Scene s1 = new Scene(5, SceneNow.MyHouse);
                        s1.MyHouse[number + 1 - 1].HouseColor = HouseColor.绿色;
                        myScene.Enqueue(s1);
                    }
                }
            }
 
             
            return true;
        }
        static private bool setRule5(Scene SceneNow)
        {//5、绿色房子主人喝咖啡
            //bool ret = false;
            for (int i = 0; i <= 4; i++)
            {
                if (SceneNow.MyHouse[i].HouseColor == HouseColor.绿色 && SceneNow.MyHouse[i].brink == brink.Null)
                {
                    Scene s1 = new Scene(6, SceneNow.MyHouse);
                    s1.MyHouse[i].brink = brink.咖啡;
                    myScene.Enqueue(s1);
                }
            }
            return true;
        }
        static private bool setRule6(Scene SceneNow)
        {//6.抽Pall Mall 香烟的人养鸟
 
            //先判断有无 Pall Mall,如果没有假设一个,在设为 鸟
 
            if (SceneNow.MyHouse.Where(h => h.cigarettes == cigarettes.PallMall ).Count() == 0)
            {//还没有人抽cigarettes
                for (int i = 0; i <= 4; i++)
                {
                    if (SceneNow.MyHouse[i].cigarettes == cigarettes.Null)
                    {
                        Scene s1 = new Scene(6, SceneNow.MyHouse); //还是回到这一步
                        s1.MyHouse[i].cigarettes = cigarettes.PallMall;
 
                        myScene.Enqueue(s1);
                    }
                }
            }
            else
            {//已经有了 ,设置为喝啤酒
                int number = SceneNow.MyHouse.Single(h => h.cigarettes == cigarettes.PallMall).Number;
                if (SceneNow.MyHouse[number - 1].pet == pet.Null ||
                        SceneNow.MyHouse[number - 1].pet == pet.鸟)
                {
                    Scene s1 = new Scene(7, SceneNow.MyHouse);
                    s1.MyHouse[number - 1].pet = pet.鸟;
                    myScene.Enqueue(s1);
                }
            }
 
           
            return true;
        }
        static private bool setRule7(Scene SceneNow)
        {//7、黄色房子主人抽Dunhill 香烟  
            //先判断有无黄色,如果没有假设一个,在设为Dunhill
 
            if (SceneNow.MyHouse.Where(h => h.HouseColor == HouseColor.黄色).Count() == 0)
            {//还没有人抽Blends
                for (int i = 0; i <= 4; i++)
                {
                    if (SceneNow.MyHouse[i].HouseColor == HouseColor.Null)
                    {
                        Scene s1 = new Scene(7, SceneNow.MyHouse); //还是回到这一步
                        s1.MyHouse[i].HouseColor = HouseColor.黄色 ;
 
                        myScene.Enqueue(s1);
                    }
                }
            }
            else
            {//已经有了 ,设置为喝啤酒
                int number = SceneNow.MyHouse.Single(h => h.HouseColor == HouseColor.黄色).Number;
                if (SceneNow.MyHouse[number - 1].cigarettes == cigarettes.Null ||
                        SceneNow.MyHouse[number - 1].cigarettes == cigarettes.Dunhill )
                {
                    Scene s1 = new Scene(8, SceneNow.MyHouse);
                    s1.MyHouse[number - 1].cigarettes = cigarettes.Dunhill;
                    myScene.Enqueue(s1);
                }
            }
 
            return true;
        }
        static private bool setRule8(Scene SceneNow)
        {//8、住在中间房子的人喝牛奶  
            //判断中间的房子还没有设置饮料或者设置的是牛奶
            int middle = 2;
            if (SceneNow.MyHouse[middle].brink == brink.Null || SceneNow.MyHouse[middle].brink == brink.牛奶)    
            {                 
                    Scene s1 = new Scene(9, SceneNow.MyHouse);
                    s1.MyHouse[middle].brink = brink.牛奶;                     
 
                    myScene.Enqueue(s1);
               
            }
 
            return true;
        }
        static private bool setRule9(Scene SceneNow)
        {//9、 挪威人住第一间房
            //判断第一件的房子还没有设置国籍或者设置的是挪威
            int first = 0;
            if (SceneNow.MyHouse[first].nationalities == nationalities.Null || SceneNow.MyHouse[first].nationalities == nationalities.挪威)
            {
                Scene s1 = new Scene(10, SceneNow.MyHouse);
                s1.MyHouse[first].nationalities = nationalities.挪威;
                myScene.Enqueue(s1);
            }
 
            return true;
        }
        static private bool setRule10(Scene SceneNow)
        {//10、抽Blends香烟的人住在养猫的人隔壁
            //先判断有没有抽Blends的人,如果有在旁边设置养猫的人,如果没有,先假设几种抽Blends香烟的人 
 
            if (SceneNow.MyHouse.Where(h => h.cigarettes == cigarettes.Blends).Count() == 0)
            {//还没有人抽Blends
                for (int i = 0; i <= 4; i++)
                {
                    if (SceneNow.MyHouse[i].cigarettes == cigarettes.Null )
                    {
                        Scene s1 = new Scene(10, SceneNow.MyHouse); //还是回到这一步
                        s1.MyHouse[i].cigarettes = cigarettes.Blends ;                      
 
                        myScene.Enqueue(s1);
                    }
                }
            }
            else
            {//已经有了
                int number = SceneNow.MyHouse.Single(h => h.cigarettes == cigarettes.Blends).Number;
 
                if (number >1)
                {//左边
                    if (SceneNow.MyHouse[number - 1 - 1].pet == pet.Null ||
                        SceneNow.MyHouse[number - 1 - 1].pet == pet.猫)
                    {
                        Scene s1 = new Scene(11, SceneNow.MyHouse);
                        s1.MyHouse[number - 1 - 1].pet = pet.猫;
                        myScene.Enqueue(s1);
                    }
                }
                if (number <5)
                {//右边
                    if (SceneNow.MyHouse[number + 1 - 1].pet == pet.Null ||
                        SceneNow.MyHouse[number + 1 - 1].pet == pet.猫)
                    {
                        Scene s1 = new Scene(11, SceneNow.MyHouse);
                        s1.MyHouse[number + 1 - 1].pet = pet.猫;
                        myScene.Enqueue(s1);
                    }
                }
 
            }
             
 
            return true;
        }
        static private bool setRule11(Scene SceneNow)
        {//11、养马的人住抽Dunhill 香烟的人隔壁
 
            //先判断有没有抽Dunhill的人,如果有在旁边设置养马的人,如果没有,先假设几种抽Dunhill香烟的人 
 
            if (SceneNow.MyHouse.Where(h => h.cigarettes == cigarettes.Dunhill ).Count() == 0)
            { 
                for (int i = 0; i <= 4; i++)
                {
                    if (SceneNow.MyHouse[i].cigarettes == cigarettes.Null )
                    {
                        Scene s1 = new Scene(11, SceneNow.MyHouse); //还是回到这一步
                        s1.MyHouse[i].cigarettes = cigarettes.Dunhill;                      
 
                        myScene.Enqueue(s1);
                    }
                }
            }
            else
            {//已经有了
                int number = SceneNow.MyHouse.Single(h => h.cigarettes == cigarettes.Dunhill).Number;
 
                if (number >1)
                {//左边
                    if (SceneNow.MyHouse[number - 1-1].pet == pet.Null ||
                        SceneNow.MyHouse[number - 1-1].pet == pet.马)
                    {
                        Scene s1 = new Scene(12, SceneNow.MyHouse);
                        s1.MyHouse[number - 1 - 1].pet = pet.马;
                        myScene.Enqueue(s1);
                    }
                }
                if (number <5)
                {//右边
                    if (SceneNow.MyHouse[number + 1 - 1].pet == pet.Null ||
                        SceneNow.MyHouse[number + 1 - 1].pet == pet.马)
                    {
                        Scene s1 = new Scene(12, SceneNow.MyHouse);
                        s1.MyHouse[number + 1 - 1].pet = pet.马;
                        myScene.Enqueue(s1);
                    }
                }
 
            }
             
 
            return true;
        }
        static private bool setRule12(Scene SceneNow)
        {//12、抽Blue Master的人喝啤酒
            //先判断有没有,如果没有假设几种 抽Blue Master的人,在回到本步骤,设置为喝啤酒
 
            if (SceneNow.MyHouse.Where(h => h.cigarettes == cigarettes.BlueMaster ).Count() == 0)
            {//还没有人抽Blends
                for (int i = 0; i <= 4; i++)
                {
                    if (SceneNow.MyHouse[i].cigarettes == cigarettes.Null)
                    {
                        Scene s1 = new Scene(12, SceneNow.MyHouse); //还是回到这一步
                        s1.MyHouse[i].cigarettes = cigarettes.BlueMaster;
 
                        myScene.Enqueue(s1);
                    }
                }
            }
            else
            {//已经有了 ,设置为喝啤酒
                int number = SceneNow.MyHouse.Single(h => h.cigarettes == cigarettes.BlueMaster).Number;
                if (SceneNow.MyHouse[number   - 1].brink == brink.Null ||
                        SceneNow.MyHouse[number - 1].brink == brink.啤酒)
                {
                    Scene s1 = new Scene(13, SceneNow.MyHouse);
                    s1.MyHouse[number - 1].brink = brink.啤酒;
                    myScene.Enqueue(s1);
                }
            }
 
 
            return true;
        }
        static private bool setRule13(Scene SceneNow)
        {//13、德国人抽Prince香烟
 
            //先判断有没有,如果没有假设几种 德国人,在回到本步骤,设置为抽Prince香烟
 
            if (SceneNow.MyHouse.Where(h => h.nationalities == nationalities.德国).Count() == 0)
            {//还没有人抽Blends
                for (int i = 0; i <= 4; i++)
                {
                    if (SceneNow.MyHouse[i].nationalities == nationalities.Null)
                    {
                        Scene s1 = new Scene(13, SceneNow.MyHouse); //还是回到这一步
                        s1.MyHouse[i].nationalities = nationalities.德国;
 
                        myScene.Enqueue(s1);
                    }
                }
            }
            else
            {//已经有了 ,设置为喝啤酒
                int number = SceneNow.MyHouse.Single(h => h.nationalities == nationalities.德国).Number;
 
                if (SceneNow.MyHouse[number   - 1].cigarettes == cigarettes.Null ||
                        SceneNow.MyHouse[number   - 1].cigarettes == cigarettes.Prince)
                {
                    Scene s1 = new Scene(14, SceneNow.MyHouse);
                    s1.MyHouse[number - 1].cigarettes = cigarettes.Prince;
                    myScene.Enqueue(s1);
                }
            }
 
 
            return true;
        }
        static private bool setRule14(Scene SceneNow)
        {//14、挪威人住蓝色房子隔壁
 
            int n = myScene.Where(s => s.MyHouse[1].HouseColor == HouseColor.蓝色).Count();
 
            //先判断有没有 蓝色房子,如果有在旁边 设为 挪威 ,如果没有,先假设几种 蓝色 
 
            if (SceneNow.MyHouse.Where(h => h.HouseColor == HouseColor.蓝色).Count() == 0)
            {//还没有 蓝色
                for (int i = 0; i <= 4; i++)
                {
                    if (SceneNow.MyHouse[i].HouseColor == HouseColor.Null || SceneNow.MyHouse[i].HouseColor == HouseColor.蓝色 )
                    {
                        Scene s1 = new Scene(14, SceneNow.MyHouse); //还是回到这一步
                        s1.MyHouse[i].HouseColor = HouseColor.蓝色 ;                      
 
                        myScene.Enqueue(s1);
                    }
                }
            }
            else
            {//已经有了
                int number = SceneNow.MyHouse.Single(h => h.HouseColor == HouseColor.蓝色).Number;
 
                if (number >1)
                {//左边
                    if (SceneNow.MyHouse[number - 1 - 1].nationalities == nationalities.Null ||
                        SceneNow.MyHouse[number - 1 - 1].nationalities == nationalities.挪威)
                    {
                        Scene s1 = new Scene(15, SceneNow.MyHouse);
                        s1.MyHouse[number - 1 - 1].nationalities = nationalities.挪威;
                        myScene.Enqueue(s1);
                    }
                }
                if (number <5)
                {//右边
                    if (SceneNow.MyHouse[number + 1 - 1].nationalities == nationalities.Null ||
                        SceneNow.MyHouse[number + 1 - 1].nationalities == nationalities.挪威)
                    {
                        Scene s1 = new Scene(15, SceneNow.MyHouse);
                        s1.MyHouse[number + 1 - 1].nationalities = nationalities.挪威;
                        myScene.Enqueue(s1);
                    }
                }
 
            }
             
 
            return true;
        }
        static private bool setRule15(Scene SceneNow)
        {//15、抽Blends香烟的人有一个喝水的邻居
 
 
            //先判断有没有 Blends,如果有在旁边 设为 喝水 ,如果没有,先假设几种 Blends 
 
            if (SceneNow.MyHouse.Where(h => h.cigarettes == cigarettes.Blends ).Count() == 0)
            {//还没有 Blends
                for (int i = 0; i <= 4; i++)
                {
                    if (SceneNow.MyHouse[i].cigarettes == cigarettes.Null)
                    {
                        Scene s1 = new Scene(15, SceneNow.MyHouse); //还是回到这一步
                        s1.MyHouse[i].cigarettes = cigarettes.Blends;                      
 
                        myScene.Enqueue(s1);
                    }
                }
            }
            else
            {//已经有了
                int number = SceneNow.MyHouse.Single(h => h.cigarettes == cigarettes.Blends).Number;
 
                if (number >1)
                {//左边
                    if (SceneNow.MyHouse[number - 1 - 1].brink == brink.Null || SceneNow.MyHouse[number - 1 - 1].brink == brink.水 )
                    {
                        Scene s1 = new Scene(16, SceneNow.MyHouse);
                        s1.MyHouse[number - 1 - 1].brink = brink.水;
                        myScene.Enqueue(s1);
                    }
                }
                if (number <5)
                {//右边
                    if (SceneNow.MyHouse[number + 1 - 1].brink == brink.Null || SceneNow.MyHouse[number + 1 - 1].brink == brink.水)
                    {
                        Scene s1 = new Scene(16, SceneNow.MyHouse);
                        s1.MyHouse[number + 1 - 1].brink = brink.水;
                        myScene.Enqueue(s1);
                    }
                }
 
            }
             
 
            return true;
        }
    }
 
    class Scene
    {
        public int Step = 0;
        public House[] MyHouse;
 
        public Scene(int step,House[] MyHouse)
        {
            Step = step;
 
            this.MyHouse = (House[])MyHouse.Clone();
            this.MyHouse[0] = this.MyHouse[0].clone();
            this.MyHouse[1] = this.MyHouse[1].clone();
            this.MyHouse[2] = this.MyHouse[2].clone();
            this.MyHouse[3] = this.MyHouse[3].clone();
            this.MyHouse[4] = this.MyHouse[4].clone();
 
        }
 
        public override string ToString()
        {
            string output = "\nScene:(step" + Step.ToString() + ")\n";
            foreach (House h in MyHouse)
            {
                output += h.ToString() + "\n";
            }
            return output;
        }
    }
 
    class House
    {
        public int Number;
        public HouseColor HouseColor = HouseColor.Null ;
        public nationalities nationalities = nationalities.Null ;
        public pet pet = pet.Null ;
        public cigarettes cigarettes= cigarettes.Null ;
        public brink brink = brink.Null ;
 
        public House(int number)
        {
            Number = number;            
        }
 
        public House clone()
        {
            House newHouse = new House(this.Number);
            newHouse.HouseColor = this.HouseColor;
            newHouse.nationalities = this.nationalities;
            newHouse.pet = this.pet;
            newHouse.cigarettes = this.cigarettes;
            newHouse.brink = this.brink;
            return newHouse;
        }
 
        public override string ToString()
        {
            return string.Format("No:{0},颜色:{1},国籍:{2},宠物:{3},香烟:{4},饮料:{5}",
                Number, HouseColor, nationalities, pet, cigarettes, brink);
        }
    }
 
    enum HouseColor
    {
        Null,红色, 白色,绿色, 黄色, 蓝色        
    }
    enum nationalities
    {
        Null, 英国, 瑞典, 丹麦, 挪威, 德国
    }
    enum pet
    {
        Null, 狗, 鸟, 猫, 马, 鱼
    }
    enum cigarettes
    {
        Null, PallMall, Dunhill, Blends, BlueMaster, Prince
    }
    enum brink
    {
        Null, 茶, 咖啡, 牛奶, 啤酒, 水
    }
 
    
}

当前评分 5.0 , 共有 1 人参与

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags:  
Categories:   WinForms/C#
Actions:   E-mail | del.icio.us | Permalink | 评论 (2) | Comment RSSRSS comment feed

评论

添加评论


(将显示你的Gravatar图标)  

  Country flag

biuquote
  • 评论
  • 在线预览
Loading



 
酷站目录