Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Vonder
1 / 1 / 0
Регистрация: 06.07.2012
Сообщений: 9
#1

Отрисовать выход из лабиринта - C++

22.01.2013, 22:18. Просмотров 474. Ответов 0
Метки нет (Все метки)

Доброго времени суток, дорогие форумчане!
Очень нужна ваша помощь с лабиринтом
Помогите пожалуйста прикрутить волновой алгоритм, как ни борюсь нормально не выходит.
Ссылки на сам алгоритм
http://algolist.manual.ru/maths/graphs/shortpath/wave.php
http://algolist.manual.ru/games/wavealg.php

Ссылка на картинки-тесты
http://yadi.sk/d/vutQBOal22UhK

На картинке изображены две точки : красная и зеленая, нужно найти кратчайший путь и отрисовать его.
Очень нужна ваша помощь. Как найти точки на картинке разобрался. А с поиском пути не очень.
Очень буду благодарен, если и некоторые комментарии будут.
Заранее спасибо!


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 "stdafx.h"
#include "ololo.h"
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>
 
using namespace cv;
using namespace std;
 
bool findRedPoint( Mat &inputImage, Point &outputPoint ) {
    if( inputImage.channels() != 3 ) { // If imgae is not an RGB
        return false;
    }
    else{
        bool flag = false;
        Point solPoint; 
        vector<Mat> planes;
        split(inputImage, planes);
        Mat ImgGray;//серое
        cvtColor(inputImage, ImgGray, CV_RGB2GRAY);
        Mat ImgBin;
        threshold(ImgGray, ImgBin, 200, 255,  CV_THRESH_BINARY);
        for(int i=0; i<inputImage.rows; i++){
            for(int j=0; j<inputImage.cols; j++){
                if(planes[1].at<uchar>(i,j) != ImgBin.at<uchar>(i,j)){
                    solPoint.x = i;
                    solPoint.y = j;
                    flag = true;
                }
            }
        }
        return(flag);
    }
} 
 
bool findGreenPoint( Mat &inputImage, Point &outputPoint ) {
    if( inputImage.channels() != 3 ) { // If imgae is not an RGB
        return false;
    }
    else{
        bool flag = false;
        Point solPoint; 
        vector<Mat> planes;
        split(inputImage, planes);
        Mat ImgGray;//серое
        cvtColor(inputImage, ImgGray, CV_RGB2GRAY);
        Mat ImgBin;
        threshold(ImgGray, ImgBin, 200, 255,  CV_THRESH_BINARY);
        for(int i=0; i<inputImage.rows; i++){
            for(int j=0; j<inputImage.cols; j++){
                if(planes[2].at<uchar>(i,j) != ImgBin.at<uchar>(i,j)){
                    solPoint.x = i;
                    solPoint.y = j;
                    flag = true;
                }
            }
        }
        return(flag);
    }
}
 
bool findRoute( Mat &image, Point &entryPoint, Point &exitPoint ) {
    // ToDo: find and draw a route between entry and exit points 
    // or return FALSE if it's impossible;
    return(true);
}
 
int main( int argc, char *argv[] ) {
    /*if( argc != 2 ) {
        cerr << "Wrong parameters" << endl;
        return -1;
    }*/
    char name[255] = "image.png";
    Mat image = imread( name/*argv[ 1 ]*/, -1 );
    if( !image.data ) {
        cerr << "Can't load " << name/*argv[ 1 ]*/ << " image file" << endl;
        system("pause");
        return -1;
    }
    namedWindow("Source Image", CV_WINDOW_FREERATIO);
    imshow ("Source Image", image);
    Point entryPoint, exitPoint;
    bool x = findRedPoint(image, entryPoint);
    if( findGreenPoint( image, entryPoint ) && ( findRedPoint( image, exitPoint ) ) ) {
        if( findRoute( image, entryPoint, exitPoint ) ) {
            imshow( "Route", image );
            waitKey();
        } else {
            cout << "Can't find a route" << endl;
        }
    } else {
        cout << "Can't find entry or exit point" << endl;
    }
    waitKey();
    return 0;
}
Добавлено через 1 час 37 минут
http://yadi.sk/d/INF5jJjm22hmO
извините, это правильная ссылка на картинки
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.01.2013, 22:18
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Отрисовать выход из лабиринта (C++):

Выход из лабиринта - C++
Всем привет, возник вопрос по поводу лабиринта. Посмотрев форум не нашел такого же задания. Суть - написать программу, с помощью которой...

Найти выход из лабиринта - C++
Пожалуйста помогите решить. Перевод. Вопрос задачи: наити выход роботу из лабиринта. Робот проходит только через (.), а это (#)...

Выход из лабиринта. В чем ошибка? - C++
Не могу понять, почему моя программа иногда выдает ошибку, а иногда работает хорошо. Помогите пожалуйста. #include&lt;iostream&gt; #include...

Прохождение лабиринта - C++
Приведенная ниже сетка единиц и нулей - двумерный массив, представляющий лабиринт. 111111111111 100010000001 001010111101 ...

Обход лабиринта - C++
Добрый вечер. Стоит задача обойти лабиринт, заданный матрицей (вводятся размерности и начальное положение), т. е. посетить каждую клетку,...

Прохождение лабиринта - C++
Привет всем , вот такая задача ... Найдите маршрут в квадрате, который начинался бы и заканчивался в ячейке 1. При этом посетить все...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.01.2013, 22:18
Привет! Вот еще темы с ответами:

Прохождение лабиринта - C++
Как написать программу для прохождения лабиринта? У меня не получается. Саму программу можно не писать, а только алгоритм дайте и советы....

Прохождение лабиринта - C++
Нужно пройти от 1 до 16 самым коротким путем. И вывести на экран количество шагов.

Прохождение лабиринта - C++
Имеется лабиринт. Нужно составить алгоритм, по которому программа найдет выход из лабиринта. мой начальный код. работает нормально,...

Генерация лабиринта - C++
Разработать приложение, генерирующее лабиринт размером m x n клеток. Дополнительные условия: а) Вход и выход – произвольные клетки...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru