Exemple #1
0
        /// <summary>
        /// 用于在textbox中输出MyMatrix对象的可达集、先行、并集。
        /// </summary>
        /// <param name="m"></param>
        /// <param name="rbb"></param>
        public void OutputMyMatrix(MyMatrix m, TextBoxBase rbb)
        {
            rbb.Text = rbb.Text + "\r\n" + "------------------------------------要素" + m.XB + ":----------------------------------\r\n可达集为: ";

            foreach (int item in m.KD)
            {
                rbb.Text = rbb.Text + item + " ";
            }
            rbb.Text = rbb.Text + "\r\n先行集为:";
            foreach (int item in m.XX)
            {
                rbb.Text = rbb.Text + item + " ";
            }
            rbb.Text = rbb.Text + "\r\n可达集与先行集的并集为:";
            foreach (int item in m.KDnXX)
            {
                rbb.Text = rbb.Text + item + " ";
            }
        }
        private void button3_Click(object sender, EventArgs e)
        {
            if (MyMatrix.kdMatrix == null) //先判断是否计算出了可达矩阵
            {
                MessageBox.Show("请先计算可达矩阵!");
                return;
            }

            List <MyMatrix> mm = new List <MyMatrix>(); //创建MyMatrix类对象集合,存放级间划分对象(27个)
            MatrixOperation mo = new MatrixOperation();

            richTextBox1.Text = richTextBox1.Text + "\r\n<<<<<<<<<<第1级间划分计算>>>>>>>>>>\r\n";
            for (int i = 0; i < MyMatrix.kdMatrix.GetLength(0); i++) //遍历可达矩阵,对各对象的可达集、先行集、并集赋值;
            {
                MyMatrix m = new MyMatrix();                         //每循环一次创建一个MyMatrix对象
                m.XB = i + 1;                                        //存放下标

                for (int j = 0; j < MyMatrix.kdMatrix.GetLength(1); j++)
                {
                    if (MyMatrix.kdMatrix[i, j] == 1)//对象可达集赋值
                    {
                        m.KD.Add(j + 1);
                    }
                    if (MyMatrix.kdMatrix[j, i] == 1)//对象先行集赋值
                    {
                        m.XX.Add(j + 1);
                    }
                }
                m.KDnXX = m.KD.Intersect(m.XX).ToList();//取kd与xx的交集
                mo.OutputMyMatrix(m, richTextBox1);
                mm.Add(m);
            }
            //------------------------------------------------------------第二轮-------------------------------------------------
            int cs     = 1;        //记录处理的次数(第几级级间划分)
            int judge  = 0;        //用于存放每一轮剔除元素的个数
            int judge2 = mm.Count; //存放集合中元素的个数

            while (judge != judge2)
            {
                judge = 0;
                cs    = cs + 1;
                List <MyMatrix> removeMyMatrix = new List <MyMatrix>();//存放剔除出的元素
                judge2 = mm.Count;

                List <MyMatrix> lsmm = new List <MyMatrix>();
                for (int i = 0; i < mm.Count; i++)//为临时的mymatrix集合赋值,不能直接=,因为此为引用类型
                {
                    lsmm.Add(mm[i]);
                }
                for (int i = 0; i < lsmm.Count; i++)                    //剔除集合中的要素(其他要素中的可达集等先未剔除)
                {
                    if (mo.JudgeListAndList(lsmm[i].KD, lsmm[i].KDnXX)) //判断两个list集合是否相等
                    {
                        mm.Remove(lsmm[i]);
                        removeMyMatrix.Add(lsmm[i]);
                        judge = judge + 1;
                    }
                }

                foreach (MyMatrix m in mm) //剔除集合中可达集中的被踢出要素
                {
                    for (int i = 0; i < removeMyMatrix.Count; i++)
                    {
                        m.KD.Remove(removeMyMatrix[i].XB);
                        m.XX.Remove(removeMyMatrix[i].XB);
                        m.KDnXX.Remove(removeMyMatrix[i].XB);
                    }
                }

                richTextBox1.Text = richTextBox1.Text + "\r\n" + "\r\n" + "第" + (cs - 1) + "层元素为:";
                for (int i = 0; i < removeMyMatrix.Count; i++)//循环输出剔除元素(层)
                {
                    richTextBox1.Text = richTextBox1.Text + removeMyMatrix[i].XB + " ";
                }

                richTextBox1.Text = richTextBox1.Text + "\r\n" + "\r\n<<<<<<<<<<第" + cs + "级间划分计算>>>>>>>>>>\r\n";
                foreach (MyMatrix m in mm)
                {
                    mo.OutputMyMatrix(m, richTextBox1);
                }
            }

            //--------------------------对richtextbox中的字体进行设置
            mo.ChangeKeyBold("第1层元素为:", FontStyle.Bold, richTextBox1, Color.Red);
            mo.ChangeKeyBold("第2层元素为:", FontStyle.Bold, richTextBox1, Color.Red);
            mo.ChangeKeyBold("第3层元素为:", FontStyle.Bold, richTextBox1, Color.Red);
            mo.ChangeKeyBold("第4层元素为:", FontStyle.Bold, richTextBox1, Color.Red);
            mo.ChangeKeyBold("第5层元素为:", FontStyle.Bold, richTextBox1, Color.Red);
            mo.ChangeKeyBold("第6层元素为:", FontStyle.Bold, richTextBox1, Color.Red);
            mo.ChangeKeyBold("第7层元素为:", FontStyle.Bold, richTextBox1, Color.Red);
            mo.ChangeKeyBold("第8层元素为:", FontStyle.Bold, richTextBox1, Color.Red);
            mo.ChangeKeyBold("第9层元素为:", FontStyle.Bold, richTextBox1, Color.Red);
            mo.ChangeKeyBold("第10层元素为:", FontStyle.Bold, richTextBox1, Color.Red);
            mo.ChangeKeyBold("第11层元素为:", FontStyle.Bold, richTextBox1, Color.Red);
            mo.ChangeKeyBold("第12层元素为:", FontStyle.Bold, richTextBox1, Color.Red);
            mo.ChangeKeyBold("第13层元素为:", FontStyle.Bold, richTextBox1, Color.Red);
            mo.ChangeKeyBold("第14层元素为:", FontStyle.Bold, richTextBox1, Color.Red);
            mo.ChangeKeyBold("第15层元素为:", FontStyle.Bold, richTextBox1, Color.Red);
            mo.ChangeKeyBold("<<<<<<<<<<第1级间划分计算>>>>>>>>>>", FontStyle.Bold, richTextBox1, Color.Red);
            mo.ChangeKeyBold("<<<<<<<<<<第2级间划分计算>>>>>>>>>>", FontStyle.Bold, richTextBox1, Color.Red);
            mo.ChangeKeyBold("<<<<<<<<<<第3级间划分计算>>>>>>>>>>", FontStyle.Bold, richTextBox1, Color.Red);
            mo.ChangeKeyBold("<<<<<<<<<<第4级间划分计算>>>>>>>>>>", FontStyle.Bold, richTextBox1, Color.Red);
            mo.ChangeKeyBold("<<<<<<<<<<第5级间划分计算>>>>>>>>>>", FontStyle.Bold, richTextBox1, Color.Red);
            mo.ChangeKeyBold("<<<<<<<<<<第6级间划分计算>>>>>>>>>>", FontStyle.Bold, richTextBox1, Color.Red);
            mo.ChangeKeyBold("<<<<<<<<<<第7级间划分计算>>>>>>>>>>", FontStyle.Bold, richTextBox1, Color.Red);
            mo.ChangeKeyBold("<<<<<<<<<<第8级间划分计算>>>>>>>>>>", FontStyle.Bold, richTextBox1, Color.Red);
            mo.ChangeKeyBold("<<<<<<<<<<第9级间划分计算>>>>>>>>>>", FontStyle.Bold, richTextBox1, Color.Red);
            mo.ChangeKeyBold("<<<<<<<<<<第10级间划分计算>>>>>>>>>>", FontStyle.Bold, richTextBox1, Color.Red);
            mo.ChangeKeyBold("<<<<<<<<<<第11级间划分计算>>>>>>>>>>", FontStyle.Bold, richTextBox1, Color.Red);
            mo.ChangeKeyBold("<<<<<<<<<<第12级间划分计算>>>>>>>>>>", FontStyle.Bold, richTextBox1, Color.Red);
            mo.ChangeKeyBold("<<<<<<<<<<第13级间划分计算>>>>>>>>>>", FontStyle.Bold, richTextBox1, Color.Red);
            mo.ChangeKeyBold("<<<<<<<<<<第14级间划分计算>>>>>>>>>>", FontStyle.Bold, richTextBox1, Color.Red);
            mo.ChangeKeyBold("<<<<<<<<<<第15级间划分计算>>>>>>>>>>", FontStyle.Bold, richTextBox1, Color.Red);
            mo.ChangeKeyBold("<<<<<<<<<<第16级间划分计算>>>>>>>>>>", FontStyle.Bold, richTextBox1, Color.Red);
        }