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

Ввод двумерного массива из файла - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Блок-схема http://www.cyberforum.ru/cpp-beginners/thread888218.html
Доброго дня,всем...Помогите пожалуйста составить 2 простенькие блок-схемы по следующим прогам #include<stdio.h> #include<iostream.h> #include<math.h> #include<stdlib.h> int main() { FILE...
C++ Инвентаризация В инвентарном файле содержатся сведения о том, изделия каких видов продукции и в каком количестве хранились на складе на момент последней инвентаризации. Сведения включают артикул изделия,... http://www.cyberforum.ru/cpp-beginners/thread888212.html
C++ Дана строка символов. Подсчитать общее число вхождений символов
Привет всем. Дана строка символов. Подсчитать общее число вхождений символов .,+ в строку. Помогите реализовать данную программу. Нашел пару вариантов на форуме типа: #include <iostream>...
Вывести всех однофамильцев C++
Есть массив обьектов. Надо вывести всех однофамильцев по очереди. я сделал так что береться первый елемент(первый цикл), и проверяеться со всеми остальними(второй цикл), если елемент подошел то...
C++ Задачка про IP сети, работа с массивами http://www.cyberforum.ru/cpp-beginners/thread888195.html
Помогите пожалуйста %) Задача Перед министерством страны стоит задача: объединить все IP адреса, которые есть в стране, в наименьшую возможную сеть. Для этого работники переписали все IP адреса,...
C++ Можно ли распарсить XLS файл? Всем добрый день хотел задать вопрос, можно ли распарсить XLS файл средствами C++? Заранее спасибо. подробнее

Показать сообщение отдельно
Prokill1
0 / 0 / 0
Регистрация: 15.10.2011
Сообщений: 12

Ввод двумерного массива из файла - C++

02.06.2013, 17:04. Просмотров 484. Ответов 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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
#include "stdafx.h"
#include <stack>
#include <iostream>
#include <string>
#include <algorithm>
#include <locale>
 
const int OPEN_VAL   =  0;
const int CLOSE_VAL  =  1;
const int START_VAL  = -1;
 
struct T_cell
{
    int i_;
    int j_;
    T_cell(int i, int j) : i_(i), j_(j)
    {}
 
    bool operator==(const T_cell& c)
    {
        return i_ == c.i_ && j_ == c.j_;
    }
 
    bool operator!=(T_cell c)
    {
        return !(*this == c);
    }
};
 
struct T_path_node
{
    T_cell  prev_cell_;
    T_cell  cur_cell_;
 
    T_path_node
        (
            T_cell  prev_cell,
            T_cell  cur_cell
        ) : prev_cell_(prev_cell), cur_cell_(cur_cell)
    {}
};
 
std::ostream& operator<<(std::ostream& os, const T_cell&  cell)
{    
    os << "(" << cell.i_ << ", " << cell.j_ << ")";
    return os;
}
 
 
typedef std::stack<T_path_node>  T_path_stack;
 
bool fill_stack(T_path_stack&  path_stack)
{    
    const int m = 9;
    const int n = 9;
    int labirint[][n] = {{1, 1,  1, 1,  1, 0, 1, 1, 1},
                         {1, 0,  0, 0,  1, 0, 1, 0, 1},
                         {1, 0,  1, 0,  0, 0, 1, 0, 1},
                         {1, 0,  1, 0,  1, 0, 1, 0, 1},
                         {1, 0,  0, 0,  0, 0, 1, 0, 1},
                         {1, 0,  1, 1,  1, 1, 1, 0, 1},
                         {1, 0,  0, 1,  0, 0, 0, 0, 1},
                         {1, 1,  0, 0,  0, 1, 1, 1, 1},
                         {1, 1,  1, 1, -1, 1, 1, 1, 1}};
 
     
    for(int cur_cell_val = START_VAL; ; --cur_cell_val)
    {       
        int  start_stack_size = path_stack.size();
        for(int i = 0; i < m; ++i)
        {
            for(int j = 0; j < n; ++j)
            {
                if(labirint[i][j] == cur_cell_val)
                {
        
                    for(int  i_sosed = std::max(i - 1, 0);
                        i_sosed <= std::min(i + 1, m - 1); ++i_sosed)
                    {
                        for(int  j_sosed = std::max(j - 1, 0);
                            j_sosed <= std::min(j + 1, n - 1); ++j_sosed)
                        {
                            if((i_sosed == i || j_sosed == j)
                                && labirint[i_sosed][j_sosed] == OPEN_VAL)
                            {
                                labirint[i_sosed][j_sosed] = cur_cell_val - 1;                        
                                path_stack
                                    .push(                                             
                                             T_path_node(
                                                           T_cell(i, j),                                                            
                                                           T_cell(i_sosed, j_sosed)
                                                        )
                                         );                       
                                if(i_sosed == 0 || i_sosed == m - 1
                                   || j_sosed == 0 || j_sosed == n - 1)
                                {                            
                                    return true;
                                }
                            }
                        }                 
                    }
                }
            }    
        }  
        if(path_stack.size() == start_stack_size) return false;
    }
}
 
void print_path(T_path_stack  path_stack)
{
    std::cout << "Маршрут в лабиринте от выхода до стартовой клетки:" << std::endl;
    for(;;)
    {
        T_cell  prev_cell = path_stack.top().prev_cell_;
        std::cout << path_stack.top().cur_cell_ << std::endl;
        if(path_stack.size() == 1)
        {
            std::cout << path_stack.top().prev_cell_ << std::endl;    
            return;
        }
        while(path_stack.top().cur_cell_ != prev_cell)
        {
            path_stack.pop();      
        }
    }
}
 
int main()
{
    std::locale::global(std::locale("rus"));
    T_path_stack  path_stack;
 
    if(!fill_stack(path_stack))
    {
        std::cout << "Нет выхода!"
                  << std::endl;    
    }
    else
    {        
        print_path(path_stack);
    }
    return 0;
}
в данной программе матрица дана в коде
к сожалению понадобилось вывести матрицу из файла input.txt, 9х9
помогите пожалуйста
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru