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

Волновой алгоритм - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Динамические массивы и функции. Динамические массивы. http://www.cyberforum.ru/cpp-beginners/thread298813.html
Дана матрица 6х8 целого типа. Создать одномерный массив, содержащий элементы матрицы, кратные числу, введенному с клавиатуры.
C++ Не могу вызвать функцию через указатель Есть функция void matrixsqr(int **a, int N, int M) как ее вызвать через указатель на функцию Добавлено через 18 минут Неужели никто не знает http://www.cyberforum.ru/cpp-beginners/thread298807.html
C++ Написать программу шифрования и дешифрования методом подстановки
Написать программу шифрования и дешифрования методом подстановки!!!
решить через классы C++
Напишите программу, в которой класс tools представляет учетные карточки выданных инструментов. В карточке хранятся фамилия получателя, название, учетный код и количество выданных экземпляров инструмента. Функция main ( ) должна продемонстрировать работу с этой картотекой – создание, заполнение и просмотр карточек
C++ Программа не работает http://www.cyberforum.ru/cpp-beginners/thread298781.html
Я написал пример так как он в методе, а мне выбивает ошибку... может потому что у меня DEV C++? Ошибки не могу разобрать Пример программы построения графика функции f(x)=(sin(x/2)*х при x= #include<stdio.h> #include<string.h> #include<conio.h>
C++ Алгоритм Хоспула Задача: поиск подстроки в строке с помощью алгоритма Хорспула. Строка задаётся из 10 млн случайных символов. Подстрока состоит, например, из 1 млн символов. А проблема в том, что алгоритм Хорспула ни в какую не хочет работать при случайном наборе строк. Но работает нормально, если строки вручную вводишь. Может кто подскажет в чём проблема? #include <iostream> #include <string> using namespace... подробнее

Показать сообщение отдельно
vaselo
19 / 19 / 1
Регистрация: 17.10.2010
Сообщений: 247
25.05.2011, 02:31  [ТС]     Волновой алгоритм

Не по теме:

все равно никак не могу реализовать волновой алгоритм для моего случая... помогите, кому не впадлу
и не бойтесь, что текст большой - сделать необх. только волновой алгоритм, выделенный в тексте горизонтальными линиями в комментах



Добавлено через 3 часа 10 минут
даже теперь вот так: только теперь немного неправильно работает...
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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
#include <stdlib.h>
#include <iostream>
#include <Windows.h>
using namespace std;
    int** file(int &m);//Считывание карты   
    void show(int** map,int m);//вывод карты
    int** mapcpy(int** map,int m);//копирование исходной карты
    int findcoords(int &xs,int &ys,int &xe,int &ye,int m,int **map);// нахождение начала-конца
void main()
{
    int W=0; //номер волны
    const int Wmax=300; //max кол-во итераци
    int m=0,is,js,ie,je;//координаты начала-конца
    int **map,s;
    map=file(m);//получили карту
    show(map,m);
    s=findcoords(is,js,ie,je,m,map);//определили начало-конец
    const int n=m;
    int** mapping=mapcpy(map,n);//копируем исходную карту (для проложения пути нужно будет)
    //--------------------------------------------------------------------
    int i,j,flag=0;
    while (flag!=1)
    {
        for (i=is; i<m; i++)
        {
            for (j=js; j<m; j++)
                { if(i<m-1 && j<m-1)
                    {
                    if (map[i][j-1]!=s+1 && j>0)
                        {
                            if(  map[i][j-1]+W>mapping[i][j-1]+W)
                                 map[i][j-1]=  mapping[i][j-1]+W;
                            else map[i][j-1]=      map[i][j-1]+W;
                    }
                    else {if(map[i][j-1]==s+1) flag=1;}
                    if(map[i-1][j]!=s+1 && i>0)
                        {
                            if(  map[i-1][j]+W>mapping[i-1][j]+W)
                                 map[i-1][j]=  mapping[i-1][j]+W;
                            else map[i-1][j]=      map[i-1][j]+W;
                         }
                    else {if(map[i-1][j]==s+1) flag=1;}
                    if(map[i+1][j]!=s+1 && i!=m-1)
                        {
                            if(  map[i+1][j]+W>mapping[i+1][j]+W)
                                 map[i+1][j]=  mapping[i+1][j]+W;
                            else map[i+1][j]=      map[i+1][j]+W;
                         }
                    else {if(map[i+1][j]==s+1) flag=1;}
                    if (map[i][j+1]!=s+1 && j>m-1)
                        {
                            if(  map[i][j+1]+W>mapping[i][j+1]+W)
                                 map[i][j+1]=  mapping[i][j+1]+W;
                            else map[i][j+1]=      map[i][j+1]+W;
                         }
                    else {if(map[i][j+1]==s+1) flag=1;}
                    }
                 W++;
            }
        }
    }
    //-------------------------------------------------------------------
cout<<"\nЛабиринт после алгоритма:"<<"\n \n";
show(map,m);
}
int** file(int &m)
{
    int **map;
    FILE* f;
    int i,j;
    char fname [80];
    cout<<"\nИмя (путь) к файлу: ";
    gets(fname);
    f=fopen(fname,"rt");
    if(f)
    {
        while(!feof(f))
        {
            if(fgetc(f)=='\n')
                m++;//Подсчет размера карты
        }
        fseek(f,0,SEEK_SET);
        map=new int* [m];
        for(i=0;i<m;i++)
            map[i]=new int [m];
        for(i=0;i<m;i++)
        {
            for(j=0;j<m;j++)
                fscanf(f,"%d",&map[i][j]);
        }
        fclose(f);
        return map;
    }
}
int findcoords(int &is,int &js,int &ie,int &je,int m,int **map)
{
    int s=map[0][0],e;
    is=js=ie=je=0;
      for (int i=0; i<m; i++)
        {for (int j=0; j<m; j++)
            {
            if (map[i][j]<s)//начало = минимальное число
                {
                    s=map[i][j]; 
                    is=i;
                    js=j;
                }
             }
      }
       for (int k=0; k<m; k++)
        {for (int l=0; l<m; l++)
            {
            if (map[k][l]==s+1)//конец=начало+1
                {
                    e=map[k][l];
                    ie=k;
                    je=l;
                    return s;
                }
                
             }
      }
       return s;
}
void show(int** map,int m)
{
for(int i=0; i<m; i++)
     {for(int j=0; j<m; j++)
        cout<<map[i][j]<<"\t"; 
    cout<<endl<<endl<<endl;
     }
 system ("pause");
 return;
}
int** mapcpy(int** map,int n)
{
    int** mapping;
    mapping=new int* [n];
    for(int i=0; i<n; i++)
    {
        mapping[i]=new int [n];
        for(int j=0; j<n; j++)
            mapping[i][j]=map[i][j];
     }
return mapping;
}
 
Текущее время: 11:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru