2016-10-14 9 views
1

Я пытаюсь понять проблему тральщик:
Постановка задачи:
Вы когда-нибудь играли Сапер? Эта милая маленькая игра поставляется с определенной операционной системой, имя которой мы не можем запомнить. Цель игры - найти, где все мины расположены в поле M × N. В игре показано число в квадрате, в котором указано, сколько мин находится рядом с этим квадратом. Каждый квадрат имеет не более восьми смежных квадратов. Поле 4 × 4 слева содержит две мины, каждая из которых представлена ​​символом «*». Если мы представим то же поле, по номерам подсказок, описанных выше, мы в конечном итоге с полем справа:
тестового пример
here is the test caseпонимание тральщик программирования p.roblem

Я не пониманием проблемы. просто объясните мне проблему, чтобы я мог решить ее самостоятельно. ПОЖАЛУЙСТА, НЕ ОБЪЯСНИТЕ РЕШЕНИЕ.

(я уже видел this problem и многие другие, как это, но они не говорят о ключевых проблемах программирования, они игровые проекты.)

+0

Похоже, проблема в том, чтобы произвести матрицу на право данного входа на левой стороне. – kennytm

+0

@kennytm да. Я не понимаю, например, как * ... был writtne как * 100. – zerobyzero

+0

Вы играли [minesweeper] (https://en.wikipedia.org/wiki/Microsoft_Minesweeper) раньше? – kennytm

ответ

1

Задача состоит в том, чтобы подсчитать количество смежных бомб на каждую ячейку карты. В игре показаны только уже выкапывающие ячейки грубого.

Вы просто подсчитать количество мин близлежащих ...

  1. вход char map[5][5] образец

    ..... 
    .*... 
    ...*. 
    ..... 
    *.... 
    
  2. создать счетчик int cnt[5][5]

    Он должен иметь тот же размер как вход map. Init его 0

    map cnt 
    ..... 00000 
    .*... 00000 
    ...*. 00000 
    ..... 00000 
    *.... 00000 
    
  3. проходным всего map

    и если map[i][j]=='*' то просто увеличиваем все соседние счетчики в cnt что-то вроде:

    for (i=0;i<5;i++) 
    for (j=0;j<5;j++) 
        if (map[i][j]=='*') 
        { 
        cnt[i-1][j-1]++; 
        cnt[i-1][j ]++; 
        cnt[i-1][j+1]++; 
        cnt[i ][j-1]++; 
        cnt[i ][j+1]++; 
        cnt[i+1][j-1]++; 
        cnt[i+1][j ]++; 
        cnt[i+1][j+1]++; 
        } 
    

    Чтобы избежать нарушения прав доступа Вы должны добавить проверку диапазона или отдельный внутренний и пограничный ртс. Вы также можете использовать размер массива, увеличенный на 1 ячейку с каждой стороны, и использовать только внутреннюю часть.

    Результат итераций на каждом успехе условия:

    map cnt 
    ..... 11100 
    .*... 10100 
    ...*. 11100 
    ..... 00000 
    *.... 00000 
    
    ..... 11100 
    .*... 10211 
    ...*. 11201 
    ..... 00111 
    *.... 00000 
    
    ..... 11100 
    .*... 10211 
    ...*. 11201 
    ..... 11111 
    *.... 01000 
    
1

В теории тральщика может быть выполнен в виде сетки объектов. Когда игрок использует какой-либо объект, тогда (в классическом тральщике) окружающие объекты проверяют ИХ окружающие объекты и подсчитывают, сколько их отмечено как мое.

 Смежные вопросы

  • Нет связанных вопросов^_^