“馬的遍歷”問題的貪婪法解決演算法
/*
標題:<<系統設計師>>應試程式設計例項-[遞推演算法程式設計]
作者:成曉旭
時間:2002年09月14日(18:20:00-20:18:00)
實現“裝箱”問題的貪婪演算法實現函式
時間:2002年09月14日(22:00:00-23:18:00)
實現“裝箱”問題的貪婪演算法實現函式
時間:2002年09月14日(18:20:38-22:18:00)
實現“人民幣找零”問題的貪婪法解決演算法
*/
#include "stdio.h"
#include "stdlib.h"
//:============================“馬的遍歷”問題的貪婪法解決演算法===========================
int delta_i[] = {2,1,-1,-2,-2,-1,1,2};
int delta_j[] = {1,2,2,1,-1,-2,-2,-1};
int board[8][8]; //棋盤陣列(board[i,j]表示:馬經過位置[i行,j列]時的步驟)
//求(i,j)的出口數,和各出口號於array[],start是順序選擇著法的開始序號
int Exit_Number(int i,int j,int start,int array[])
{
int a,b,k,count;
for(count = k = 0;k < 8;k++)
{
a = i + delta_i[(start + k) % 8];
b = j + delta_j[(start + k) % 8];
if((a >= 0 && a < 8) && (b >= 0 && b < 8) && board[a][b] == 0)
array[count ++ ] = (start + k) % 8;
}
return(count); //返回出口數
}
//選下一出口,start是順序選擇著法的開始序號
int Select_NextExit(int i,int j,int start)
{
int min_nexit,nexit,temp,a[8],b[8],k,result;
nexit = Exit_Number(i,j,start,a); //確定(i,j)的出口個數
if(nexit == 0)
return(-1); //沒有出口
for(min_nexit = 9,k = 0;k < nexit;k++)
{//逐一考察各個出口
temp = Exit_Number(i + delta_i[a[k]],j + delta_j[a[k]],start,b);
if(temp < min_nexit)
{
min_nexit = temp;
result = a[k];
}
}
return(result);
}
//“馬的遍歷”問題主函式
void Journey_Horse()
{
int x,y,i,j,start,step = 0,order;
for(x = 0;x < 8;x ++)
{
for(y = 0;y < 8;y ++)
{
start = 0; //從0號著法開始順序檢查
do
{
for(i = 0;i < 8;i++)
for(j = 0;j < 8;j++)
board[i][j] = 0; //清棋盤
board[x][y] = 1;
i = x;
j = y;
for(step = 2;step <= 64;step++)
{
if((order = Select_NextExit(i,j,start)) == -1)
break; //沒有出口
i = i + delta_i[order]; //前進一步
j = j + delta_j[order];
board[i][j] = step; //馬在第step步時將經過位置[i行,j列]
}
if(step > 64)
break; //走出棋盤了,自然應該結束迴圈
start ++; //最先檢查的著法序號增1
}while(step <= 64);
//顯示當前著法的結果
printf("x-start = [%d],y-start = [%d],start = [%d]: ",x,y,start);
for(i = 0;i < 8;i++)
{
for(j = 0;j < 8;j++)
printf("%4d",board[i][j]);
printf(" ");
}
scanf("%*c"); //輸入回車,找下一個起點的解
}
}
}
//:============================“馬的遍歷”問題的貪婪法解決演算法===========================
int main(int argc, char* argv[])
{
//Encase_Box();
//Journey_Horse();
Run_Give_Change();
printf(" 應用程式執行結束! ");
return 0;
}
標題:<<系統設計師>>應試程式設計例項-[遞推演算法程式設計]
作者:成曉旭
時間:2002年09月14日(18:20:00-20:18:00)
實現“裝箱”問題的貪婪演算法實現函式
時間:2002年09月14日(22:00:00-23:18:00)
實現“裝箱”問題的貪婪演算法實現函式
時間:2002年09月14日(18:20:38-22:18:00)
實現“人民幣找零”問題的貪婪法解決演算法
*/
#include "stdio.h"
#include "stdlib.h"
//:============================“馬的遍歷”問題的貪婪法解決演算法===========================
int delta_i[] = {2,1,-1,-2,-2,-1,1,2};
int delta_j[] = {1,2,2,1,-1,-2,-2,-1};
int board[8][8]; //棋盤陣列(board[i,j]表示:馬經過位置[i行,j列]時的步驟)
//求(i,j)的出口數,和各出口號於array[],start是順序選擇著法的開始序號
int Exit_Number(int i,int j,int start,int array[])
{
int a,b,k,count;
for(count = k = 0;k < 8;k++)
{
a = i + delta_i[(start + k) % 8];
b = j + delta_j[(start + k) % 8];
if((a >= 0 && a < 8) && (b >= 0 && b < 8) && board[a][b] == 0)
array[count ++ ] = (start + k) % 8;
}
return(count); //返回出口數
}
//選下一出口,start是順序選擇著法的開始序號
int Select_NextExit(int i,int j,int start)
{
int min_nexit,nexit,temp,a[8],b[8],k,result;
nexit = Exit_Number(i,j,start,a); //確定(i,j)的出口個數
if(nexit == 0)
return(-1); //沒有出口
for(min_nexit = 9,k = 0;k < nexit;k++)
{//逐一考察各個出口
temp = Exit_Number(i + delta_i[a[k]],j + delta_j[a[k]],start,b);
if(temp < min_nexit)
{
min_nexit = temp;
result = a[k];
}
}
return(result);
}
//“馬的遍歷”問題主函式
void Journey_Horse()
{
int x,y,i,j,start,step = 0,order;
for(x = 0;x < 8;x ++)
{
for(y = 0;y < 8;y ++)
{
start = 0; //從0號著法開始順序檢查
do
{
for(i = 0;i < 8;i++)
for(j = 0;j < 8;j++)
board[i][j] = 0; //清棋盤
board[x][y] = 1;
i = x;
j = y;
for(step = 2;step <= 64;step++)
{
if((order = Select_NextExit(i,j,start)) == -1)
break; //沒有出口
i = i + delta_i[order]; //前進一步
j = j + delta_j[order];
board[i][j] = step; //馬在第step步時將經過位置[i行,j列]
}
if(step > 64)
break; //走出棋盤了,自然應該結束迴圈
start ++; //最先檢查的著法序號增1
}while(step <= 64);
//顯示當前著法的結果
printf("x-start = [%d],y-start = [%d],start = [%d]: ",x,y,start);
for(i = 0;i < 8;i++)
{
for(j = 0;j < 8;j++)
printf("%4d",board[i][j]);
printf(" ");
}
scanf("%*c"); //輸入回車,找下一個起點的解
}
}
}
//:============================“馬的遍歷”問題的貪婪法解決演算法===========================
int main(int argc, char* argv[])
{
//Encase_Box();
//Journey_Horse();
Run_Give_Change();
printf(" 應用程式執行結束! ");
return 0;
}
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=935682
相關文章
- “裝箱”問題的貪婪法解決演算法演算法
- “人民幣找零”問題的貪婪法解決演算法演算法
- 【經典演算法問題】馬的遍歷【回溯】演算法
- 演算法(六):圖解貪婪演算法演算法圖解
- 貪心演算法(貪婪演算法,greedy algorithm)演算法Go
- 貪婪演算法回顧演算法
- Python 中的貪婪排名演算法Python演算法
- 使用貪心演算法解決集合覆蓋問題演算法
- 正規表示式:貪婪模式與非貪婪模式模式
- 正規表示式貪婪模式與非貪婪模式模式
- 【正規表示式系列】貪婪與非貪婪模式模式
- 探索貪心演算法:解決最佳化問題的高效策略演算法
- 尋路演算法-貪婪最佳優先演算法演算法
- dfs深度優先搜尋解決迷宮類問題(遍歷)
- 圖的遍歷演算法-馬遍歷棋盤演算法
- [android]智慧遍歷的解決思路Android
- 貪心演算法解硬幣找零問題演算法
- golang遍歷channel時return問題Golang
- java邊遍歷邊刪除的問題Java
- 正規表示式 貪婪模式模式
- 用python深度優先遍歷解迷宮問題Python
- 演算法——貪心演算法解0-1揹包問題演算法
- 貪心演算法——換酒問題演算法
- 放假期間網站被掛馬的解決辦法網站
- 橡皮鴨子解決問題法
- 解決無法使用VI的問題
- jquery遍歷子元素的寫法jQuery
- Python字典的遍歷,包括key遍歷/value遍歷/item遍歷/Python
- leetcode演算法題解(Java版)-12-中序遍歷LeetCode演算法Java
- Leetcode 演算法題解系列 - 二叉樹的層序遍歷LeetCode演算法二叉樹
- 加油站問題(貪心演算法)演算法
- 貪心演算法篇——區間問題演算法
- HashMap原始碼:聊聊Map的遍歷效能問題(一)HashMap原始碼
- Python演算法:遍歷Python演算法
- 跨域問題解決辦法跨域
- 回溯法解決迷宮問題
- 解決機器學習問題有通法機器學習
- 回溯法解決喝酒問題 (轉)