資源簡介
這個算法是用于解決所謂的騎士周游問題,里面用到了以前學過的貪心算法。程序是用C#寫的,界面布局還算好吧,而且有動態的顯示,看起來比較直觀。

代碼片段和文件信息
using?System;
using?System.Collections.Generic;
using?System.Linq;
using?System.Text;
namespace?KnightTour
{
????class?BackConque
????{
????????public?BackConque()
????????{
????????????count?=?0;
????????????isComplete?=?false;
????????????direction?=?0;
????????}
????????#region?自定義屬性
????????
????????private?int[]?vx?=?new?int[]?{?1?1?-1?-1?2?2?-2?-2?};
????????private?int[]?vy?=?new?int[]?{?2?-2?2?-2?1?-1?1?-1?};
????????private?long?count;???//比較次數?
????????private?int[]?path;???//記錄騎士周游的路徑
????????private?int[]?arrPath;??//記錄周游的方向的路徑
????????private?bool?isComplete;??//判斷是否結束
????????private?int?direction?;?//標記向哪個方向走
????????#endregion
????????
????????//用來獲取周游的路徑
????????public?int[]?Conque(int?strx?int?stry?int?m?int?n)
????????{
????????????strx--;???stry--;????//獲得數組的下標
????????????//判斷輸入是否正確?
????????????if?(!((?strx>=0?&&?strx?=0&&?stry?????????????????return?null;
????????????path?=?new?int[m?n];
????????????arrPath?=?new?int[m?n];
????????????//數據初始化
????????????int?x?=?strx??y?=?stry?length?=?1;
????????????bool?isFind;????//判斷該趟走法是否有解
????????????for?(int?i?=?0;?i?????????????????for?(int?j?=?0;?j?????????????????{
????????????????????arrPath[i?j]?=?-1;
????????????????????path[i?j]?=?-1;
????????????????}
????????????//初始化騎士起始點
????????????arrPath[x?y]?=?0;
????????????path[x?y]?=?1;
????????////////////////第一次迭代判斷///////////////////
????????????while?(length?(m?*?n)&&!isComplete??)
????????????{
????????????????x?=?x?+?vx[direction];//
????????????????y?=?y?+?vy[direction];//向前走一步
????????????????length++;????count++;
????????????????isFind?=?false;
????????????????//判斷該步是否越界
????????????????if?((x>=0?&&?x?=0?&&?y?????????????????{???//判斷該步是否已經走過
????????????????????if?(arrPath[x?y]?==?-1)
????????????????????{
????????????????????????arrPath[x?y]?=?direction;
????????????????????????path[x?y]?=?length;
????????????????????????direction?=?-1;
????????????????????????isFind?=?true;
????????????????????}
????????????????}
????????????????if?(!isFind)???//沒有找到,則發生回溯,后退一步
????????????????{
????????????????????x?=?x?-?vx[direction];
????????????????????y?=?y?-?vy[direction];
????????????????????length--;
???????/////////////////第二次迭代判斷/////////////////////////////
????????????????????while?(direction?==?7)
????????????????????{???//一直回溯,直到該步還有可走的方向
????????????????????????count++;
????????????????????????//判斷是否回溯到起始點
????????????????????????if?(x?==?strx?&&?y?==?stry)
????????????????????????{???//回到起始點,周游完成
????????????????????????????isComplete?=?true;
????????????????????????????break;
????????????????????????}
????????????????????????direction?=?arrPath[x?y];
????????????????????????arrPath[x?y]?=?-1;
????????????????????????x?=?x?-?vx[direction];
????????????????????????y?=?y?-?vy[direction];
????????????????????????length--;
?????????
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????5964??2011-12-27?08:54??KnightTour\KnightTour\Form1.cs
?????文件???????9364??2011-12-27?08:54??KnightTour\KnightTour\Form1.Designer.cs
?????文件????????491??2011-12-26?15:35??KnightTour\KnightTour\Program.cs
?????文件???????9053??2011-12-27?08:54??KnightTour\KnightTour\Form1.resx
?????文件???????3557??2011-12-27?09:28??KnightTour\KnightTour\BackConque.cs
?????文件???????6211??2011-12-27?09:42??KnightTour\KnightTour\obj\x86\Debug\DesignTimeResolveAssemblyReferencesInput.cache
?????文件???????2014??2011-12-27?08:54??KnightTour\KnightTour\obj\x86\Debug\KnightTour.Form1.resources
?????文件????????180??2011-12-26?15:58??KnightTour\KnightTour\obj\x86\Debug\KnightTour.Properties.Resources.resources
?????文件????????546??2011-12-27?08:54??KnightTour\KnightTour\obj\x86\Debug\GenerateResource.read.1.tlog
?????文件????????534??2011-12-27?08:54??KnightTour\KnightTour\obj\x86\Debug\GenerateResource.write.1.tlog
?????文件??????16896??2011-12-27?09:42??KnightTour\KnightTour\obj\x86\Debug\KnightTour.exe
?????文件????????688??2011-12-27?08:52??KnightTour\KnightTour\obj\x86\Debug\KnightTour.csproj.FileListAbsolute.txt
?????文件???????7897??2011-12-26?21:30??KnightTour\KnightTour\obj\x86\Debug\ResolveAssemblyReference.cache
?????文件??????32256??2011-12-27?09:42??KnightTour\KnightTour\obj\x86\Debug\KnightTour.pdb
?????文件???????4440??2011-12-27?08:52??KnightTour\KnightTour\obj\x86\Debug\DesignTimeResolveAssemblyReferences.cache
?????文件????????490??2010-03-17?22:39??KnightTour\KnightTour\bin\Debug\KnightTour.vshost.exe.manifest
?????文件??????11600??2011-12-27?08:52??KnightTour\KnightTour\bin\Debug\KnightTour.vshost.exe
?????文件??????16896??2011-12-27?09:42??KnightTour\KnightTour\bin\Debug\KnightTour.exe
?????文件??????32256??2011-12-27?09:42??KnightTour\KnightTour\bin\Debug\KnightTour.pdb
?????文件???????3720??2011-12-27?10:46??KnightTour\KnightTour\KnightTour.csproj
?????文件???????1376??2011-12-26?15:35??KnightTour\KnightTour\Properties\AssemblyInfo.cs
?????文件???????5612??2011-12-26?15:35??KnightTour\KnightTour\Properties\Resources.resx
?????文件???????2870??2011-12-26?15:35??KnightTour\KnightTour\Properties\Resources.Designer.cs
?????文件????????249??2011-12-26?15:35??KnightTour\KnightTour\Properties\Settings.settings
?????文件???????1095??2011-12-26?15:35??KnightTour\KnightTour\Properties\Settings.Designer.cs
?????文件????????872??2011-12-27?10:46??KnightTour\KnightTour.sln
????..A..H.?????19968??2011-12-27?10:46??KnightTour\KnightTour.suo
?????目錄??????????0??2011-12-26?15:35??KnightTour\KnightTour\obj\x86\Debug\TempPE
?????目錄??????????0??2011-12-26?15:35??KnightTour\KnightTour\obj\x86\Debug
?????目錄??????????0??2011-12-26?15:35??KnightTour\KnightTour\obj\x86
............此處省略9個文件信息
- 上一篇:ClamAV病毒簽名方法大全
- 下一篇:F28027外部中斷控制LED流水燈
評論
共有 條評論