Показать сообщение отдельно
  #12  
Старый 31.07.2015, 16:19
Luster Luster вне форума
Прохожий
 
Регистрация: 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: пользуемся тегами оформления, иначе придут санкции и запинают моск...
Ответить с цитированием