Форум программистов, компьютерный форум 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

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

18.05.2011, 16:56. Просмотров 3792. Ответов 4
Метки (Все метки)

Доброго времени суток, дорогие форумчане.
Никак не додумаю волновой алгоритм, помогите, кто чем может:
файл - матрица целых чисел, где минимальное число - начало, а начало+1 - конец.
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
#include "stdafx.h"
#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);//копирование исходной карты
    void 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;
    map=file(m);//получили карту
    show(map,m);
    findcoords(is,js,ie,je,m,map);//определили начало-конец
    const int n=m;
    int** mapping=mapcpy(map,n);//копируем исходную карту (для проложения пути нужно будет)
    //--------------------------------------------------------------------
    while (W!=Wmax)
    {
        for (int i=is; i<m; i++)
        {
            for (int j=js; j<m; j++)
                 if(map[i][j]==W && i<m-1 && j<m-1)
                    {
                     if (map[i][j+1]!=-1||map[i][j+1]!=0)
                        map[i][j+1]=map[i][j+1]+W;
                     if (map[i+1][j]!=-1||map[i+1][j]!=0)
                        map[i+1][j]=map[i+1][j]+W;
                     if (map[i+1][j]!=-1||map[i+1][j]!=0 && i!=0 && j!=0)
                     }
        }
        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;
    }
}
void 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;
                }
                
             }
      }
}
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;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru