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

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

#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 请问如何在matlab里使用raven工具?
  • ¥100 关于ios手游充值到一定金额,再点充值提示公众号的问题。
  • ¥15 求一个stm32串口控制程序
  • ¥20 Windows 驱动开发版本疑问相关
  • ¥15 MAC 未能打开磁盘映像
  • ¥15 fastcap使用,二维导体输入问题
  • ¥15 hosts修改后不能访问
  • ¥15 关于化学反应速率C++编译问题/FLUENT
  • ¥20 Yolov5训练报错
  • ¥15 Unity发布gzip压缩的webgl之后让浏览器可以正常显示画面