treelinkedlist.cs

来自「classic tsp analysis method with c++ !」· CS 代码 · 共 115 行

CS
115
字号
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 + =
减小字号Ctrl + -
显示快捷键?