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

📄 treelinkedlist.cs

📁 十分完善的华容道程序,有多种布局的求解!
💻 CS
字号:
using System;
using System.Collections;
using HRD.Core;

namespace HRD.TreeList
{
	public class TreeLinkedList : ITreeList
	{
		protected class TreeNode
		{
			public ChessStep chessStep;
			public TreeNode parentNode;
			public TreeNode link;
		}

		protected TreeNode root = null;
		protected TreeNode current = null;
		protected TreeNode end = null;

		protected int count;

		//======================================================
		// 清空节点
		//======================================================
		public void ClearAll()
		{
			root = null;
			current = null;
			end = null;
			count = 0;
		}

		//======================================================
		// 插入节点
		//======================================================
		public void insertNode(ChessStep newitem)
		{
			TreeNode newNode;
    
			newNode = new TreeNode();
			newNode.chessStep = newitem;
			newNode.link = null;
			newNode.parentNode = null;

			if(root == null)
			{   
				root = newNode;
				current = newNode;
				end = current;
			}
			else
			{
				newNode.parentNode = current;
				end.link = newNode;
				end = newNode;
				end.link = newNode;
				end = newNode;
			}
			count++;
		}

		//======================================================
		// 移动当前指针到下一个节点
		//======================================================
		public void MoveCurrentToNext()
		{
			if(current != null && current.link != null)
				current = current.link;
		}

		//======================================================
		// 获取步法列表
		//======================================================
		public ChessStep[] TraceResult(ChessStep chessStep)
		{
			Stack stack = new Stack();
			TreeNode nodeTracer = current;
			MoveMethod m1,m2;
			short n1,n2;

			m1 = chessStep.moveMethod;
			n1 = chessStep.chessmanNum;

			chessStep.moveMethod = MoveMethod.Nothingness;
			chessStep.chessmanNum = -1;
			stack.Push(chessStep);

			while(nodeTracer != root)
			{
				m2 = nodeTracer.chessStep.moveMethod;
				n2 = nodeTracer.chessStep.chessmanNum;

				nodeTracer.chessStep.moveMethod = m1;
				nodeTracer.chessStep.chessmanNum = n1;
				stack.Push(nodeTracer.chessStep);

				m1=m2;
				n1=n2;

				nodeTracer = nodeTracer.parentNode;
			}

			root.chessStep.moveMethod = m1;
			root.chessStep.chessmanNum = n1;
			stack.Push(root.chessStep);

			int n = stack.Count;
			ChessStep[] chessSteps = new ChessStep[n];
			for(int i=0; i<n; i++)
				chessSteps[i] = (ChessStep)(stack.Pop());

			return chessSteps;
		}
	}
}

⌨️ 快捷键说明

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