Luminous425 2022-01-28 18:03 采纳率: 100%
浏览 22
已结题

调试可以输入,但没有输出,为什么卡在输出上了?

#include <iostream>
using namespace std;

char a[20][21];

struct note
{
    int x;
    int y;
};

int getnum(int, int);

int main()
{
    note que[401];
    int head, tail;
    int book[20][20] = {0};
    
    int i, m, n, startx, starty, max = 0, mx, my, tx, ty, sum;
    
    int next[4][2] = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};
    
    cout << "行数: ";
    cin >> n;
    cout << "列数: ";
    cin >> m;
    cout << "起始位置: ";
    cin >> startx >> starty;

    for(i = 0; i <= n - 1; i++)
    {
        cin >> a[i];
    }
    
    head = 1;
    tail = 1;
    
    que[tail].x = startx;
    que[tail].y = starty;
    tail++;
    book[startx][starty] = 1;
    max = getnum(startx, starty);
    mx = startx;
    my = starty;
    
    while(head < tail)
    {
        for(i = 0; i <= 3; i++)
        {
            tx = que[head].x + next[i][0];
            ty = que[head].y + next[i][1];
            
            if(tx < 0 || tx > n-1 || ty < 0 || ty > m-1)
            {
                continue;
            }
            
            if(a[tx][ty] == '.' && book[tx][ty] == 0)
            {
                book[tx][ty] = 1;
                que[tail].x = tx;
                que[tail].y = ty;
                tail++;
                
                sum = getnum(tx, ty);
                
                if(sum > max)
                {
                    max = sum;
                    mx = tx;
                    my = ty;
                }
            }
        }
        head++;
    }
    
    cout << "将炸弹放置在 ( " << mx << " , " << my << " )处,可以实现最多消灭 " << max << "个敌人。" << endl;
    
    system("pause");
    return 0;
}

int getnum(int i, int j)
{
    int sum, x, y;
    sum = 0;
    
    //向上 
    x = i;
    y = j;
    while(a[x][y] != '#')
    {
        if(a[x][y] == 'G')
        {
            sum++;
            x--;
        }
    }
    
    //向下 
    x = i;
    y = j;
    while(a[x][y] != '#')
    {
        if(a[x][y] == 'G')
        {
            sum++;
            x++;
        }
    }
    
    //向右 
    x = i;
    y = j;
    while(a[x][y] != '#')
    {
        if(a[x][y] == 'G')
        {
            sum++;
            y++;
        }
    }
    
    //向左 
    x = i;
    y = j;
    while(a[x][y] != '#')
    {
        if(a[x][y] == 'G')
        {
            sum++;
            y--;
        }
    }
    
    return sum;
}

输入为:
13 13 3 3
#############
#GG.GGG#GGG.#
###.#G#G#G#G#
#.......#..G#
#G#.###.#G#G#
#GG.GGG.#.GG#
#G#.#G#.#.###
##G...G.....#
#G#.#G###.#G#
#...G#GGG.GG#
#G#.#G#G#.#G#
#GG.GGG#G.GG#
#############

img


输入完就像这样,无法输入也不输出结果。

  • 写回答

1条回答 默认 最新

  • SmallAntJ 2022-01-28 20:58
    关注

    输入写的没问题,应该是陷入死循环了,43行进入getnum()以后就没出来。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 3月22日
  • 已采纳回答 3月14日
  • 创建了问题 1月28日

悬赏问题

  • ¥15 魔霸ROG7 pro,win11.息屏后会显示黑屏,如图,如何解决?(关键词-重新启动)
  • ¥15 有没有人知道这是哪里出了问题啊?要怎么改呀?
  • ¥200 C++表格文件处理-悬赏
  • ¥15 Windows Server2016本地登录失败
  • ¥15 复合卡卡号轨道写入芯片卡
  • ¥20 基于MATLAB的TDOA
  • ¥15 为啥输入字体突然变了
  • ¥20 已知坐标,换成MATLAB可以用的数据
  • ¥15 这个python五子棋代码的每一句意思是什么啊
  • ¥15 求一段隐藏代码,隐藏一些内容