日期:2014-05-18 浏览次数:20594 次
private void button1_Click(object sender, EventArgs e) //做了个win form程序
{
                //这里用xml来表示,p表示人, islie取值为t (表示说谎) 或者 f(表示没说谎)
                //say表示这个人说的话。"!b" 表示'b说谎',"b" 表示'b没说谎', "!a, !b"
                //表示'a, b都说谎', "!a;!b"表示'a或者b说谎',余类推。规定不能用!,;三
                //种符号结尾
                string xml = "<Data>"
                    + "<p name='a' islie='' say='!b' isset='0' />"
                    + "<p name='b' islie='' say='!c' isset='0'  />"
                    + "<p name='c' islie='' say='!a,!b' isset='0'  />"
                    + "</Data>";
                XDocument xdoc = XDocument.Parse(xml);
                var item = xdoc.Descendants("p").FirstOrDefault();
                //任一人只有两种可能,说谎或者不说谎,因此任取1人足矣
                    if (String.IsNullOrEmpty(item.Attribute("islie").Value))
                    {
                        item.SetAttributeValue("islie", "f");//假设该人没说谎
                        if (isLie(item) == false)
                        {//若返回false,说明假设错误
                            foreach (var item2 in xdoc.Descendants("p"))
                            {//复位
                                item2.SetAttributeValue("islie", "");
                                item2.SetAttributeValue("isset", "0");
                            }
                            item.SetAttributeValue("islie", "t");//重新假设
                            if (isLie(item) == false)
                            {//说明无解
                                displayAnswer(item, false);
                                break;
                            }
                            else
                            {
                                displayAnswer(item, true);
                                break;
                            }
                        }
                        else
                        {
                            displayAnswer(item, true);
                            break;