⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 doc.cs

📁 基于BP算法的贝叶斯网络参数学习
💻 CS
📖 第 1 页 / 共 5 页
字号:
			if(fromPoint.X!=0&&toPoint.X!=0)
			{
				Graphics g=this.CreateGraphics();
				g.DrawLine(new Pen(Color.Blue,1),fromPoint,toPoint);
			}
			//this.Cursor=Cursors.Cross;*/
			
		//Invalidate();
		//CurrentLine = new Line();
		//CurrenLine
        // this.Refresh();
        #endregion
        private void Doc_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
        {
            #region 画图代码
            //foreach (BNode1 node in myNodeArray)
            //{
            //    if (node.IsInNode(new Point(e.X, e.Y)))
            //    {
            //        node.BackColor = Color.DarkSeaGreen;
            //    }
            //    else
            //    {
            //        node.BackColor = tempColor;
            //    }
            //}

            if (this.Cursor == Cursors.SizeAll && e.Button == MouseButtons.Left)
            {
                myNodeArray.AddNewNode(e.X, e.Y);
                this.Cursor = Cursors.Arrow;
            }
            if (this.Cursor == Cursors.Cross)
            {
                foreach (BNode1 node in myNodeArray)
                {
                    if (node.IsInNode(new Point(e.X, e.Y)))
                    {
                        from = node.from;
                        CurrentLine = new Line();
                        CurrentLine.StartPoint = from;
                        CurrentLine.sNode = node.Text;
                        node.OutDegree++;
                    }
                }
            }
            Invalidate();
            foreach (Line l in Lines)
            {
                if (((l.EndPoint.X > l.StartPoint.X && l.StartPoint.X < e.X && e.X < l.EndPoint.X) || (l.StartPoint.X > l.EndPoint.X && l.EndPoint.X < e.X && e.X < l.StartPoint.X)) && (l.yPositon(e.X) - e.Y) > -5 && (l.yPositon(e.X) - e.Y) < 5)
                {
                    l.PenWidth = 5;
                }
                else
                {
                    l.PenWidth = 1;
                }
            }
            #endregion
        }

        private void Doc_MouseEnter(object sender, System.EventArgs e)
        {
            #region 注释
            //Point MouseLocation=Control.MousePosition;
            //MessageBox.Show(MouseLocation.X.ToString());
            //foreach(BNode1 node in myNodeArray)
            //{
            //if(node.Left <= MouseLocation.X &&MouseLocation.X<= (node.Left+node.Width)&&node.Top <= MouseLocation.Y&& MouseLocation.Y<= (node.Top+node.Height))
            //	MessageBox.Show(node.from.X.ToString());

            //}
            //}
            #endregion
        }

		private void Doc_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
        {
            #region 注释
            //int i=0;
			//if(e.KeyCode==Keys.A)
			//{
			//i=3;
			//MessageBox.Show(i.ToString());
			//}
			
			//  {
			//  foreach(BNode1 node in myNodeArray)
			// {
			  
			//   MessageBox.Show(node.from.X.ToString());
			// }
            // }
            #endregion
        }

		private void Doc_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
        {
            #region 注释
            //int i=0;
			//if(e.KeyChar==(char)61)
			//{
			//i=3;
			//MessageBox.Show(i.ToString());
            //}
            #endregion 
        }
        #region 注释
        /*	private void Doc_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
		{
			
			//Graphics g=this.CreateGraphics();
			foreach(Line l in Lines)
				l.DrawLine(e.Graphics);
			//this.Refresh();
			//Invalidate();


			//Graphics g=this.CreateGraphics();
			///
			//for(int i=0;i<myNodeArray.Count;i++)
			//	for(int j=i+1;j<myNodeArray.Count;j++)
			//	{ 
			//	g.DrawLine(new Pen(Color.Blue,1),myNodeArray[i].from,myNodeArray[j].to);
			//Invalidate();
			//this.Refresh();
			//	}

			//foreach(BNode1 node in myNodeArray)
			//{
			//if(node.ClientRectangle.Contains(new Point(e.ClipRectangle.X,e.ClipRectangle.Y)))
			// MessageBox.Show("dfdF");
			///else
			//{
			//}
		}*/
        #endregion
        protected override void OnPaint(PaintEventArgs pe)
		{
				
			foreach(Line l in Lines)
				l.DrawLine(this);
			base.OnPaint(pe);		
		}

        private void Doc_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
        {   // originto=to;
            #region 画图的代码
            if (this.Cursor == Cursors.Cross)
            {
                foreach (BNode1 node in myNodeArray)
                {
                    if (node.IsInNode(new Point(e.X, e.Y)))
                    {
                        to = node.to;
                        CurrentLine.EndPoint = to;
                        CurrentLine.dNode = node.Text;
                        Graphics g = this.CreateGraphics();
                        CurrentLine.DrawLine(this);

                        Lines.Add(CurrentLine);
                        node.InDegree++;
                    }
                }
                if (from != originfrom || to != originto)
                {
                    Graphics g = this.CreateGraphics();
                }
                else
                {
                    MessageBox.Show("the edge is already exist");
                }
                this.Cursor = Cursors.Arrow;
            }
            #endregion
        }
        //这是表示画一条边的时候鼠标起来的地点

		public new ArrayList Parent(string assessNode)
		{ 
            ArrayList parent=new ArrayList();

			foreach(Line l in Lines)
				
			{
				if(l.dNode==assessNode)
				{ 
					parent.Add(l.sNode);
				}
			}
			return parent;
		}

		public int AssessNumRows(ArrayList assessParent)
		{
			int numRows=1;
			for(int i=0;i<assessParent.Count;i++)
			{
				foreach(BNode1 node in myNodeArray)
					if(assessParent[i].ToString()==node.name)
						numRows=numRows*node.State.Count;
			}
			return numRows;
		}
			
		public ArrayList parentNodeRange(ArrayList assessParent)
		{
			ArrayList m_parentNodeRange=new ArrayList();
			for(int i=0;i<assessParent.Count;i++)
			{
				foreach(BNode1 node in myNodeArray)
					if(assessParent[i].ToString()==node.name)
						m_parentNodeRange.Add(node.Range);
			}
			return m_parentNodeRange;
		}//assessParent代表什么意思?range又是什么意思?
		//public string[,] parentNodeState(ArrayList assessParent)

        #region 图的邻接矩阵
        public int[] minDegree()
		{   
            const int MaxInt=100;
			int indWidth=0;
			int size=myNodeArray.Count;
			int[] order=new int[size];
			int[] index=new int[size];
			//temporary array for keeping current degree
			int[] deg=new int[size];
			for(int i=0;i<size;i++)
				deg[i]=myNodeArray[i].Degree;
			// .... how to add edges without changing the graph?
			// well, let's just have a temporary adjacency matrix
			bool[][] adjMatrix=new bool[size][];
			for(int i=0;i<size;i++)
			adjMatrix[i]=new bool[size];
			//initial
			for(int i=0;i<size;i++)
				for(int j=0;j<size;j++)
					adjMatrix[i][j]=false;
            //node's truth connection states
			foreach(Line l in Lines)
			{
				int lform=0;
				int lto=0;
				foreach(BNode1 node in myNodeArray)
				{
					if(l.sNode==node.name)
						lform=node.ID;
					if(l.dNode==node.name)
						lto=node.ID;
				}
				adjMatrix[lform-1][lto-1]=true;
				adjMatrix[lto-1][lform-1]=true;
                //这表示形成一个对称矩阵,但是以后利用此矩阵的时候就会有麻烦。可以屏蔽此句!
			}
      // Put nodes in the ordering
			int next=size-1;// starting index in the ordering    起始位置为0
			while(next>=0)
			{
				int minDeg=MaxInt;
				int minNode=-1;
				//select node with minimum degree
				for(int i=0;i<size;i++)
					if(deg[i]<minDeg)
					{
						minDeg=deg[i];
						minNode=i;
					}
				//put node next in the ordering
				order[next]=minNode;
				index[minNode]=next;
				//update induced width
				if(deg[minNode]>indWidth)
					indWidth=deg[minNode];
				// do not ever select this node again
				deg[minNode]=MaxInt;
				// connect  parents using adjMatrix
				for ( int i = 0; i<size ; i++ )
					if ( adjMatrix[minNode][i] )
						for ( int j = i+1; j < size; j++ )
							if (adjMatrix[minNode][j]) 	 	
								// connect i to j
								if ( ! adjMatrix[i][j] ) 
								{
									deg[i]++;
									deg[j]++;
									adjMatrix[i][j] = true;
									adjMatrix[j][i] = true;
								}	
				// now delete node maxNode from the graph (from adjMatrix)
				for (int  i = 0; i < size ; i++ )
					if ( adjMatrix[minNode][i] )  
					{
						adjMatrix[minNode][i] = false;
						adjMatrix[i][minNode] = false;
						deg[i]--; 
					}
				next--;
			}
			for(int i=0;i<size;i++)
				MessageBox.Show(myNodeArray[order[i]].name.ToString());
			return order;
		}//没明白是干什么的?
        #endregion
        private void toolStripButton1_Click(object sender, EventArgs e)
        {
            this.Cursor = Cursors.SizeAll;
        }

        private void toolStripButton2_Click(object sender, EventArgs e)
        {
            this.Cursor = Cursors.Cross;
            originfrom = this.from;
            originto = this.to;
        }

        private void toolStripButton3_Click(object sender, EventArgs e)
        {
            //MessageBox.Show(this.AutoScaleBaseSize.Width.ToString());
            //this.AutoScaleBaseSize.Width=12;
            SizeF sf=new SizeF(2.0f,2.0f);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -