VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)

VB爱好者乐园(VBGood)

 找回密码
 立即注册
搜索
查看: 201|回复: 2

[求助] 这个简单的代码怎么翻译成VB呢?

[复制链接]
发表于 2019-8-31 07:32:16 | 显示全部楼层 |阅读模式
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>

using namespace std;

const int MaxL = 10 + 5, MaxN = 100 + 5;
const int Dx[5] = {0, 0, 1, -1}, Dy[5] = {1, -1, 0, 0};

int n, m, Tot;
int A[MaxN][MaxN], Map[MaxL][MaxL], Ans[MaxL][MaxL];

inline bool Inside(int x, int y)
{
    if (x < 0 || x >= n) return false;
    if (y < 0 || y >= m) return false;
    return true;
}

inline int Get_Index(int x, int y)
{
    return x * m + y + 1;
}

struct Pos
{
    int x, y;
};

inline Pos Get_Pos(int Num)
{
    Pos ret;
    ret.x = (Num - 1) / m;
    ret.y = ((Num % m - 1) + m) % m;
    return ret;
}

void Get_Equation(int x, int y)
{
    int Id, Id2, xx, yy;
    Id = Get_Index(x, y);
    for (int i = 1; i <= Tot; ++i) A[Id][i] = 0;
    A[Id][Tot + 1] = Map[x][y];
    A[Id][Id] = 1;
    for (int k = 0; k < 4; ++k)
    {
        xx = x + Dx[k]; yy = y + Dy[k];
        if (!Inside(xx, yy)) continue;
        Id2 = Get_Index(xx, yy);
        A[Id][Id2] = 1;
    }
}

inline void Swap(int p, int q)
{
    int Temp;
    for (int i = 1; i <= Tot + 1; ++i)
    {
        Temp = A[p][i];
        A[p][i] = A[q][i];
        A[q][i] = Temp;
    }
}

void Gauss()
{
    int Tj;
    for (int i = 1; i <= Tot; ++i)
    {
        Tj = i;
        for (int j = i + 1; j <= Tot; ++j)
        {
            if (A[Tj][i] == 0 && A[j][i] == 1)
            {
                Tj = j;
                break;
            }
        }
        if (A[Tj][i] == 0) continue;
        if (Tj != i) Swap(Tj, i);
        for (int j = i + 1; j <= Tot; ++j)
        {
            if (A[j][i] == 0) continue;
            for (int k = i; k <= Tot + 1; ++k)
                A[j][k] ^= A[i][k];
        }
    }
     
    Pos Pi;
    for (int i = Tot; i >= 1; --i)
    {
        Pi = Get_Pos(i);
        Ans[Pi.x][Pi.y] = A[i][Tot + 1];
        for (int j = i - 1; j >= 1; --j)
            if (A[j][i]) A[j][Tot + 1] ^= A[i][Tot + 1];
    }
}

int main()
{
    scanf("%d%d", &n, &m);
    Tot = n * m;
    for (int i = 0; i < n; ++i)
        for (int j = 0; j < m; ++j)
            scanf("%1d", &Map[i][j]);
    for (int i = 0; i < n; ++i)
        for (int j = 0; j < m; ++j)
            Get_Equation(i, j);
    Gauss();
     
    printf("Solution:\n");
    for (int i = 0; i < n; ++i)
    {
        for (int j = 0; j < m; ++j)
            printf("%d", Ans[i][j]);
        printf("\n");
    }
    return 0;
}
发表于 2019-9-2 14:34:48 | 显示全部楼层
难度不高,只要有点C++基础就能转,不过代码太长,没人有义务免费转代码。楼主学下C++就可以了,大概看了下代码好像是游戏里的,Map二维数组是地图
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2019-9-3 20:18:03 | 显示全部楼层
jy4977596491 发表于 2019-9-2 14:34
难度不高,只要有点C++基础就能转,不过代码太长,没人有义务免费转代码。楼主学下C++就可以了,大概看了下 ...

感谢关注,我和您私下沟通一下
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

文字版|手机版|小黑屋|VBGood  

GMT+8, 2019-9-22 01:32

VB爱好者乐园(VBGood)
快速回复 返回顶部 返回列表