Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.07.2011, 11:24   #1
wazaaaup
Новичок
Джуниор
 
Регистрация: 03.07.2011
Сообщений: 2
По умолчанию Обход шахматной доски конем

Вобщем нужно обойти шахматную доску конем. Сижу часа 2 никак не могу добить алгоритм поначалу ходы щитает правельно но в конце заметно что чтото идет не так, но вот что не пойму... возможно какого нибудь условия нехватает...

вот и сам код... может кто подскажет что не так.

Код:
#include"stdafx.h"
#include<stdio.h>
#include<conio.h>
#include<iostream>

int i,j, n, nsqr, q ;
int dx[8], dy[8], h[9][9] ;
void prnt(void)
{
int p, r ;
	for ( p = 0 ; p<=n ; p++)
	{
	for ( r = 0 ; r<=n ; r++ )
	     printf("%2d ", h[p][r] ) ;
	 printf("\n") ;
	}
	printf("\n") ;
}
int t ( int i, int x, int y)
{
if(i>n*n)
	return 1;
if(x>7||x<0)
        return 1;
if(y>7||y<0)
        return 1;
if(h[x][y]==-1){
	h[x][y]=i;}
else
	return 1;
for(int j=1;j<=8;j++)
	t(i+1,x+dx[j],y+dy[j]);
}
int main()
{int x,y;
setlocale(LC_CTYPE,"Russian");
	dx[1] =  2; dx[2] =  1; dx[3] = -1; dx[4] = -2;
	dx[5] = -2; dx[6] = -1; dx[7] =  1; dx[8] =  2;
	dy[1] =  1; dy[2] =  2; dy[3] =  2; dy[4] =  1;
	dy[5] = -1; dy[6] = -2; dy[7] = -2; dy[8] = -1;
	n=8 ;       nsqr = n*n ;
	system("cls");
	for (int p = 0 ; p<=n ; p++)
	{
	for (int r = 0 ; r<=n ; r++ )
		h[p][r]=-1;}
	std::cout<<"Введите положение коня на шахматной доске x y\n";
	std::cin>>x>>y;
	//h[x][y]=1 ;
	if (t (1, x, y)==0) printf("\nнет решений") ;
	else prnt() ;
	getch() ;
}
wazaaaup вне форума Ответить с цитированием
Старый 04.07.2011, 20:54   #2
wazaaaup
Новичок
Джуниор
 
Регистрация: 03.07.2011
Сообщений: 2
По умолчанию

а все разобрался, просто алгоритм был не правельный а точнее вобще идиотский) с головы можно сказать взял, а потом скачал книгу почитал и реализовал)

Вот может кому пригодится....

Код:
#include "stdafx.h"
#include <iostream>
#include <conio.h>
using namespace std;

int find_path(int ,int, int);
int f_perspective(int,int);
void print();
int dx[8]={2,2,1,1,-1,-1,-2,-2},dy[8]={1,-1,2,-2,2,-2,1,-1},d[8][8];

void main(){
	setlocale(LC_CTYPE,"Russian");
	int x,y;
cout<<"Введите координаты положения коня на доске";
cin>>x>>y;
for(int i=0;i<8;i++){
	for (int j=0;j<8;j++)
		d[i][j]=0;}
find_path(1,x,y);
print();
getch();
}

void print(){
for (int i=0;i<8;i++){
	for(int j=0;j<8;j++)
		printf("%4d",d[i][j]);
	cout<<"\n\n";
}
}

int f_perspective(int x,int y){
	int max=0,u=0;
for (int i=0;i<8;i++){
	if(x+dx[i]<8 && x+dx[i]>=0
		&& y+dy[i]<8 && y+dy[i]>=0){
			if(d[x+dx[i]][y+dy[i]]==0)
				u++;
	}
}
return u;}


int find_path(int i,int x,int y){
d[x][y]=i;
if (i>=64)
	return 1;
int min=8,u,v=-1,j;
for (j=0;j<8;j++){
	if(x+dx[j]<8 && x+dx[j]>=0
		&& y+dy[j]<8 && y+dy[j]>=0){
			if(d[x+dx[j]][y+dy[j]]==0){
				u=f_perspective(x+dx[j],y+dy[j]);
				if(u<min){
					min=u;
					v=j;}
			}
	}
}
	find_path(i+1,x+dx[v],y+dy[v]);}
wazaaaup вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание своего класса в Delphi 7 - фигуры для шахматной доски electric Компоненты Delphi 18 24.10.2013 15:06
надо найти ошибку в коде(язык C).Обход конем доски SeriiMD Помощь студентам 2 20.02.2011 17:45
Пролог. Обход конем шахматной доски Gambler Помощь студентам 9 08.12.2010 22:19
Обход конем шахмотной доки Evgeniy21 Помощь студентам 1 28.01.2010 01:16