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

📄 coba.cpp

📁 algorithm bfs to solve knight tour problem
💻 CPP
字号:
#include <queue>
#include <stdio.h>
#include <conio.h>

using namespace std;
struct Node
{
	int Row, Col, Step;
	Node(int r=0, int c=0, int s=0)
	{
		Row=r;
		Col=c;
		Step=s;
	}
};

int CountKnightPath(int KRow, int KCol, int DestRow, int DestCol)
{
	//jika sudah sampai pada langkah pertama
	if(KRow==DestRow && KCol==DestCol)
		return 0;
	queue<Node> q;

	bool Cell[8][8];		//board
	for(int i=0;i<8;i++)	//init board
	{
		for(int j=0;j<8;j++)
		{
			Cell[i][j]=false;
		}
	}

	int dr[8], dc[8];		//step
	dr[0]=-2; dc[0]=1;		//kanan atas 1
	dr[1]=-1; dc[1]=2;		//kanan atas 2
	dr[2]=1;  dc[2]=2;
	dr[3]=2;  dc[3]=1;
	dr[4]=2;  dc[4]=-1;
	dr[5]=1;  dc[5]=-2;
	dr[6]=-1; dc[6]=-2;
	dr[7]=-2; dc[7]=-1;

	Node Root(KRow, KCol);	//init knight
	q.push(Root);			//simpan
	Cell[KRow][KCol]=true;	//tandai

	while(!q.empty())
	{
		//ambil palig depan
		Node Current=q.front();
		q.pop();
		//untuk tiap kemungkinan langkah
		for (i=0;i<8;i++)
		{
			//cek valid board
			if(Current.Row+dr[i]>=0 && Current.Row+dr[i]<8 && Current.Col+dc[i]>=0 && Current.Col+dc[i]<8)
			{
				//cek sudah dijalani
				if(Cell[Current.Row+dr[i]][Current.Col+dc[i]]==false)
				{
					//buat node baru
					Node Child(Current.Row+dr[i],Current.Col+dc[i],Current.Step+1);
					//Jika node baru adalah kotak tujuan -->keluar, kembalikan jarak sekarang
					if(Child.Row==DestRow && Child.Col==DestCol) return Child.Step;
					else 
						q.push(Child);
				}
			}
		}
	}

	return -1;
}

void main()
{
	int Xawal, Yawal, Xtujuan, Ytujuan;
	printf("Posisi x knight mula-mula : "); scanf("%d", &Xawal);
	printf("Posisi y knight mula-mula : "); scanf("%d", &Yawal);
	printf("Posisi x knight tujuan : "); scanf("%d", &Xtujuan);
	printf("Posisi y knight tujuan : "); scanf("%d", &Ytujuan);

	int langkah=CountKnightPath(Yawal,Xawal,Ytujuan,Xtujuan);
	if(langkah==-1)
	{
		printf("Langkah tidak ditemukan");
	}
	else
		printf("Langkah yang dibutuhkan untuk sampai ke tujuan adalah %d langkah", langkah);
	getch();
}

⌨️ 快捷键说明

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