
31.07.2015, 16:19
|
Прохожий
|
|
Регистрация: 29.07.2015
Сообщения: 5
Версия Delphi: visual studio
Репутация: 10
|
|
Доброе время суток. Вот собрал код. Но матрица выводится с 0, а нужно с 1, если size -\+ 1 то в строках проходит, а в столбцах ошибка. Так же результат как только не пробовал записать в файл - ошибка. И взгляните пожалуйста на функции удаления и поиска. Правильно ли я все сделал?
Код:
#include <stdio.h>
#include <iostream>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
using namespace std;
int size;
int result;
int main(void)
{
setlocale(LC_ALL,"RUS");
int r, c;
FILE* fp = fopen("1.txt", "r");
if(! fp)
exit(1);
fscanf(fp, "%2d", &size);
fgetc(fp);
if(! size)
{
fclose(fp);
exit(2);
}
int** mat = new int*[size];
for(r = 0; r < size; r++)
mat[r] = new int[size];
char buf[255];
char* str;
memset(buf, '\0', sizeof(buf));
for(r = 0; fgets(buf, sizeof(buf), fp); r++)
{
for(c = 0, str = strtok(buf, " "); str; str = strtok(NULL, " "), c++)
mat[r][c] = atoi(str);
}
fclose(fp);
std::cout << "\n\nÑìåæíàÿ ìàòðèöà ðåçóëüòàòà:\n";
std::cout << " |"; for ( r = 0; r<size; r++) printf(" %3d", r);
std::cout << "\n----+";
for ( r = 0; r<size; r++) std::cout << "----";
std::cout << '\n';
for ( r = 0; r<size; r++)
{
printf("%3d |", r);
for (c = 0; c<size; c++) printf(" %3d", mat[r][c]);
std::cout << "\n";
}
int islandsCount();
void deleteIsland();
ofstream f;
f.open("filename");
f << result;
f.close();
void deleteIsland(char **mat, int r, int c)
{
if (mat[r][c] == 0)
return;
mat[r][c] = 0;
if (r > 0)
deleteIsland(mat, r, c-1);
if (c < size-1)
deleteIsland(mat, r, c+1);
if (r > 0)
deleteIsland(mat, r-1, c);
if (r < size-1)
deleteIsland(mat, r+1, c);
}
int islandsCount(char **mat, int size)
{
for (int c = 0; c < size; ++c)
for (int r = 0; r < size; ++r)
if (mat[c][r] != 0)
{
++result;
deleteIsland(mat, r, c);
}
return result;
}
lmikle: пользуемся тегами оформления, иначе придут санкции и запинают моск...
|