Форум программистов, компьютерный форум CyberForum.ru

Найти все пути шахматного коня между двумя заданными полями, не содержащие повторяющихся полей - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Найти раскраску вершин графа минимальным числом цветов так, что ни одно ребро не соединяло две вершины одного цвета http://www.cyberforum.ru/cpp-beginners/thread1064713.html
Найти раскраску вершин графа минимальным числом цветов так, что ни одно ребро не соединяло две вершины одного цвета. помогите по братски срочно надо)
C++ Найти максимальные элементы столбцов матрицы Помогите, пожалуйста, с таким заданием: определить и инициализировать двумерный массив целочисленных элементов, затем удвоить все положительные четные значения; с помощью оператора new создать одномерный массив, состоящий из элементов типа double precision floating point, и заполнить его кубами максимальных элементов каждой колонки исходного массива. вывести оба массива. Удалить второй массив... http://www.cyberforum.ru/cpp-beginners/thread1064699.html
Структуры.не считывается из файла C++
Всем привет! Ребят,тут такое дело,вобщем задали нам лабу написать.Нужно было написать программу,которая считывала бы из файла фамилию сотрудника и выводила бы его год рождения и оклад,программа то работает,но из файла не считывается,помогите разобраться,а то послезавтра сдавать уже:cry: #include "stdafx.h" #include <fstream> #include <string.h> #include <stdlib.h> #include <stdio.h>...
Работает с Int, а с char отказывается C++
#include <stdio.h> main() { char i; i=func1('t','p'); printf("%c", i); } func1(char p,char f) { char d;
C++ Работа со строками. Необходимо подсчитать слова содержащие русские и англ буквы http://www.cyberforum.ru/cpp-beginners/thread1064611.html
Среда Visual C++2010 По логике должно работать, но почему то кириллица игнорируется, пытался исправить подключением библиотеки locale не помогло. При использовании одной лишь латиницы алгоритм работает... В чём может быть проблема? #include <conio.h> #include <stdio.h> #include <string> void main() { printf("input\n");
C++ Вывод в консоль чисел от 1 до 1000 не используя циклов и условных операторов Условие было такое Сумеете ли вы вывести числа от 1 до 1000 средствами языка C/C++, не используя циклов и условных операторов? (Не стоит предлагать 1000 раз написать printf() или cout.) Я как то на странице с готовыми решениями наткнулся на код #include <stdio.h> #include <stdlib.h> void main(int j) { printf("%d\n", j); подробнее

Показать сообщение отдельно
D3fend0r
17 / 17 / 1
Регистрация: 14.09.2013
Сообщений: 37
07.01.2014, 21:33     Найти все пути шахматного коня между двумя заданными полями, не содержащие повторяющихся полей
Алгоритм не работает когда начальная точка равна конечной.
Как работает алгоритм: у коня есть 8 возможных перемешений, мы запускаем рек. функцию Check() с начальной позиции, а потом с позиции на которую передвинули коня. Если доходим до финальной точки, то распечатываем путь (путь сохраняется в векторе path). Если же попадаем в ситуацию когда некуда поставить коня- возвращаемся на шаг назад(удаляем из вектора path последниы элемент) и пробуем другие варианты.
'o'- поле в котором мы уже побывали
'x'- конечная точка
0- поле в котором мы еще не были.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#include <vector>
#include <iostream>
#include <utility>
using namespace std;
 
//checks path for same coordinates
bool Array_check(vector<pair<int, int>>& vec)
{
    for (int i = 0; i < vec.size(); i++)
    {
        for (int j = 0; j < vec.size(); j++)
        {
            if (i != j && vec[i].first == vec[j].first && vec[i].second == vec[j].second) return false;
        }
    }
    return true;
}
 
 
//Checks if i and j are in the range of the chess board
bool isValid(int i, int j)
{
    return i >= 0 && i < 8 && j >= 0 && j < 8;
}
 
void Check(vector<vector<char>>& board,vector<pair<int,int>>& path, int i, int j)
{
    path.push_back(pair<int, int>{i, j});// saves a path
    if (board[i][j] == 'x')
    {
        //prints a path
        for (pair<int,int>p:path)
        {
            cout << "(" << p.first << "," << p.second << ")";
        }
        cout << ";"<< endl;
    }
    else
    {
        board[i][j] = 'o';
        int _i, _j;
        
        if (_i = i - 2, _j = j + 1, isValid(_i, _j) && board[_i][_j] != 'o')
        {
            Check(board, path, _i, _j);
        }
        if (_i = i - 1, _j = j + 2, isValid(_i, _j) && board[_i][_j] != 'o')
        {
            Check(board, path, _i, _j);
        }
        
        if (_i = i + 2, _j = j + 1, isValid(_i, _j) && board[_i][_j] != 'o')
        {
            Check(board, path, _i, _j);
        }
        if (_i = i + 2, _j = j - 1, isValid(_i, _j) && board[_i][_j] != 'o')
        {
            Check(board, path, _i, _j);
        }
        if (_i = i + 1, _j = j + 2, isValid(_i, _j) && board[_i][_j] != 'o')
        {
            Check(board, path, _i, _j);
        }
        if (_i = i + 1, _j = j - 2, isValid(_i, _j) && board[_i][_j] != 'o')
        {
            Check(board, path, _i, _j);
        }
        if (_i = i - 1, _j = j - 2, isValid(_i, _j) && board[_i][_j] != 'o')
        {
            Check(board, path, _i, _j);
        }
        if (_i = i - 2, _j = j - 1, isValid(_i, _j) && board[_i][_j] != 'o')
        {
            Check(board, path, _i, _j);
        }
        board[i][j] = 0;
    }
    //removes last place    
    path.pop_back();
}
 
int main()
{
    vector<vector<char>>board(8, vector<char>(8, 0) );
    vector<pair<int, int>>path;
    int i, j, x, y;
    cout << "Start location: i= ";
    cin >> i;
    cout << "j= ";
    cin >> j;
    cout << "Finish location: x= ";
    cin >> x;
    cout << "y= ";
    cin >> y;
    board[x][y] = 'x';
    Check(board, path, i, j);
}
 
Текущее время: 05:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru