【问题标题】:c++ searching villages pasedc ++搜索村庄已通过
【发布时间】:2019-04-03 23:17:34
【问题描述】:

我们想让这个人从头到尾经过的村庄。

1/用户应输入村庄数量并将路径转换为矩阵

我们有一个矩阵动态分配

a b c d e f 是村庄 如果两个村庄之间有桥1,如果没有0

注意:用户是填写矩阵的人,不包括字母

******************.********************************* ****************************************************** *************** 我选择做什么,但我认为我们也可以使用递归

******************循环************************

循环逐行开始 如果它得到一个0 然后i++ 否则如果它得到1 它打印位置然后它跳转到另一行

示例 1:

它从a[0][0]开始到b[0][1]然后跳转指针跳转到b[1][0]和 在这两种情况下,我们将b 设置为0。所以我们没有重复相同的情况

在前面的示例中,它应该打印a and bc and d 的坐标

在示例 2 中,它应该打印 a c b d f 的坐标,这是我的尝试

void permut(int *x, int *y)
{
    int c;
    c = *x;
    *x = *y;
    *y = c;
}

main()
{   
    int x, y;

//creation
    cout << "donner la talle de matrice (ligne puis colone) : \n";
    cin >> x >> y;
    int **grid = new int *[y];
    for (int i = 0; i < y; ++i)
    {   
        grid[i] = new int[x];
    }

    for (int i = 0; i < x; i++)
    {   
        for (int j = 0; j < y; j++)
        {   
            cout << "t[" << i << "][" << j << "] : ";
            cin >> grid[i][j];
        }
    }
    for (int i = 0; i < x; i++)
    {   
        cout << "\n";
        for (int j = 0; j < y; j++)
        {   
            cout << grid[i][j] << "\t";
        }
        cout << "\n";
    }
    cout << "\n\n\n";

    do
    {   
        int i , j;
        if (grid[i][j] == 1)
        {   
            cout << i << "  " << j << "\n";
            permut(&i, &j);
            grid[i][j] = 0;
            grid[j][j] = 0;
            continue;
        }
        else if (grid[i][j] == 0)
        {   
            i++;
            continue;
        }
        else
        break;

    }while (1);

//delete

    for (int i = 0; i < y; ++i)
    {   
        delete[] grid[i];
    }

    delete[] grid;

    system("pause");
    return 0;
}

【问题讨论】:

  • 您可能想了解ClangFormat 或其他方式来格式化您的代码。这读起来很愉快。
  • 为什么在 2018 年使用手动内存管理(delete[] 等)?我们有容器。我们有智能指针。不要像 1998 年那样编写 C++ - 请。拥抱 C++17(或至少 C++11)。
  • 为什么你的permut函数存在?你不想要std::swap吗?
  • 现代 C++ 也有这种巧妙的东西,称为基于范围的 for 循环 - 和 algorithms
  • main() 是完全错误的。 main 返回 int - 总是。你甚至没有错误 void 那里的返回值。

标签: c++ matrix path


【解决方案1】:
  do
{
    if (tab[i][j] == 1)
    {
        cout << "village (" << i << ") then " << endl;
        swap(i, j);
        tab[i][j] = 0;
        tab[j][i] = 0;
    }
    else if (tab[i][j] == 0)
    {
        i++;}
    } while (i != breaki || j != breakj);
cout << "your are arrived !!\n";

【讨论】:

    猜你喜欢
    • 2015-07-03
    • 1970-01-01
    • 2015-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多