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

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

Восстановить пароль Регистрация
 
Vonder
1 / 1 / 0
Регистрация: 06.07.2012
Сообщений: 9
22.01.2013, 22:18     Отрисовать выход из лабиринта #1
Доброго времени суток, дорогие форумчане!
Очень нужна ваша помощь с лабиринтом
Помогите пожалуйста прикрутить волновой алгоритм, как ни борюсь нормально не выходит.
Ссылки на сам алгоритм
http://algolist.manual.ru/maths/grap...tpath/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
извините, это правильная ссылка на картинки
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.01.2013, 22:18     Отрисовать выход из лабиринта
Посмотрите здесь:

C++ Выход из лабиринта. В чем ошибка?
C++ Найти выход из лабиринта
Прохождение лабиринта C++
C++ Прохождение лабиринта
C++ Обход лабиринта
Выход из лабиринта C++
Прохождение лабиринта C++
C++ Прохождение лабиринта

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 01:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru