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 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵