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

Волновой алгоритм для двумерной матрицы - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Заменить заданный столбец матрицы а на вектор b http://www.cyberforum.ru/cpp-beginners/thread689157.html
Дана квадратная матрица a размерностью 5х5 и вектор b размерностью 5. Заменить заданный столбец матрицы a на вектор b. Номер столбца матрицы a вводить с клавиатуры. Матрицу и вектор инициализировать...
C++ Характеристикой строки целочисленной матрицы назовем сумму её положительных четных элементов Характеристикой строки целочисленной матрицы назовем сумму её положительных четных элементов. Переставляя строки заданной матрицы, расположить их в соответствии с ростом характеристик. Вот... http://www.cyberforum.ru/cpp-beginners/thread689148.html
C++ написать программу вычисляющую значение матричного выражения C=2(A+B)B
-ввод массивов организовать в функции main() -Сумму массивов, произведение массивов и умножение массива на число организовать в отдельных ф-циях -Печать массива С организовать в функции main() ...
C++ Быстрая Сортировка quick-sort (ошибка в 40 строке) как исправить?
#include <iostream> #include <vector> using std::endl; using std::cout; using std::vector; template<class T> void print_vector( vector<T>& v); template<class T> void...
C++ Найти сумму элементов численного массива http://www.cyberforum.ru/cpp-beginners/thread689138.html
#include "stdafx.h" #include <iostream> #include <conio.h> using namespace std; #include "stdafx.h" #include <iostream> #include <conio.h> int i; using namespace std;
C++ Вычислить Z = (S1 + S2)/ 2 Вычислить Z = (S1 + S2)/ 2; где S1 сумма положительных элементов массива X(9x6), а S2 - сумма отрицательных элементов массива А(60).Суммы вычислять в одной функции. Не могу понять в чём ошибка...... подробнее

Показать сообщение отдельно
valeriikozlov
Эксперт C++
4670 / 2496 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
05.11.2012, 20:41
Вот функция:
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
void find_path(int N,int M)
{
    struct t{
        int x, y;
    };
    t Q[10000], S, G;
    int i_st=0, i_end=1, t, i, j, a[100][100]={0};
    for(i=0; i<N; i++)
        for(j=0; j<M; j++)
        {
            if(wayToPacMan[i][j]=='G') {G.x=i; G.y=j;}
            if(wayToPacMan[i][j]=='S') {S.x=i; S.y=j;}
        }
    a[G.x][G.y]=1;
    Q[0].x=G.x; Q[0].y=G.y;
    while(i_st<i_end)
    {
        if(a[Q[i_st].x-1][Q[i_st].y]==0 && wayToPacMan[Q[i_st].x-1][Q[i_st].y]!='#')
        {
            Q[i_end].x=Q[i_st].x-1; Q[i_end++].y=Q[i_st].y;
            a[Q[i_st].x-1][Q[i_st].y]=a[Q[i_st].x][Q[i_st].y]+1;
        }
        if(a[Q[i_st].x+1][Q[i_st].y]==0 && wayToPacMan[Q[i_st].x+1][Q[i_st].y]!='#')
        {
            Q[i_end].x=Q[i_st].x+1; Q[i_end++].y=Q[i_st].y;
            a[Q[i_st].x+1][Q[i_st].y]=a[Q[i_st].x][Q[i_st].y]+1;
        }
        if(a[Q[i_st].x][Q[i_st].y-1]==0 && wayToPacMan[Q[i_st].x][Q[i_st].y-1]!='#')
        {
            Q[i_end].x=Q[i_st].x; Q[i_end++].y=Q[i_st].y-1;
            a[Q[i_st].x][Q[i_st].y-1]=a[Q[i_st].x][Q[i_st].y]+1;
        }
        if(a[Q[i_st].x][Q[i_st].y+1]==0 && wayToPacMan[Q[i_st].x][Q[i_st].y+1]!='#')
        {
            Q[i_end].x=Q[i_st].x; Q[i_end++].y=Q[i_st].y+1;
            a[Q[i_st].x][Q[i_st].y+1]=a[Q[i_st].x][Q[i_st].y]+1;
        }
        i_st++;
    }
    if(a[S.x][S.y]==0)
        cout<<"No way"<<endl;
    else
    {
        t=a[S.x][S.y];
        while(t>1)
        {
            if(a[S.x-1][S.y]==t-1)
            {
                wayToPacMan[S.x-1][S.y]='+';
                S.x--; t--;
            }
            else
            if(a[S.x+1][S.y]==t-1)
            {
                wayToPacMan[S.x+1][S.y]='+';
                S.x++; t--;
            }
            else
            if(a[S.x][S.y-1]==t-1)
            {
                wayToPacMan[S.x][S.y-1]='+';
                S.y--; t--;
            }
            else
            if(a[S.x][S.y+1]==t-1)
            {
                wayToPacMan[S.x][S.y+1]='+';
                S.y++; t--;
            }
        }
    }
}
Работает при размере карты каждая сторона не более 100. Ничего не возвращает. Выводит сообщение No way если пути нет или заполняет '+' один из самых коротких путей от S до G в массиве wayToPacMan[][]. При вызове этой функции в параметрах нужно передать количество строк и столбцов карты (массива wayToPacMan[][]), включая границы.
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru