“N皇后问题”VisualC++6.0修正版

天朝大学的“形象工程”依旧在继续,本身我们的《数据结构课程设计》就要搞完了,却还是要我们去机房上课。

没办法,就去机房“打酱油”吧……

可这酱油该怎么打呢,对了!

登录WEBQQ,和同学们玩“Q宠大乐斗”,可是不一会,一天“80点的体力值”就消耗完了。。接下来干神码呢?

呐,那就折腾Code吧……

于是,偶将我写的Code在机房的“瘟到死叉屁”上,用着古老的 VisualC++6.0 编译……

神奇的事件发生了, VC6.0 一堆错误提示,至于是什么提示我就不说了。

奇怪啦,我在 Ubuntu 下用 Codeblocks 编译是通过了的,在Win7下用DevC++编译也是通过了的。

额,对了,我还没有在 Visual C++ 里面调试过,为啥,因为我实在是比较讨厌 MS的 Visual C++ 这玩意儿!

让我我想想,我到底是哪里写的有问题?

看着那些错误提示……哦,我找到了问题所在 —— 这狗日的 Visual C++ 6.0 !

问题在这里,我先前的代码,对于数组是这样处理的(如下面例子):


int operate(int nqueen)
{
    int queen[nqueen+1];
    int safe[nqueen+1];
    int rdo[2*nqueen+1];
    int ldo[2*nqueen+1];
    return 0;
}

目的是想实现自由控制数组的长度。

但是,在VC6.0这样古老的东西里面,这种做法是通不过的。

因为,在VC6.0里面(不晓得VS2008是否也是这样),数值的长度必须是 “ 常量 ” 也就是说,必须是一个“确定大小”。

但是,问题是——我想实现数组长度的自由控制,这可咋办呢?

其实也很简单,数组嘛,本身就和指针有着千丝万缕的联系,所以我的做法是 —— 直接分配内存空间。

所以我将上面部分代码修改成了如下方案:


int operate(int nqueen)
{
    int *queen=(int *)malloc((nqueen+1)*sizeof(int));
    int *safe=(int *)malloc((nqueen+1)*sizeof(int));
    int *rdo=(int *)malloc((2*nqueen+1)*sizeof(int));
    int *ldo=(int *)malloc((2*nqueen+1)*sizeof(int));
    return 0;
}

我直接把数组当指针处理!

对了,我这里是用的 malloc 函数,这种 C语言 版的方式来实现内存的分配,当然,如果你对C++的 “ 数据流 ” 比较熟悉的话,也可以使用 new 来实现内存的分配。

好了,我这里用了指针的方式,所以调用这些 “ 数组 ” 的时候,你也要适当修改一下啦。

另外,想起那天 小邪 告诉,她看到了一个很NB的家伙,和我一样都是处理 “N皇后问题” ,还给了我一个链接。

我看了一下,也没什么不同,就是 “ 皇后座位 ” 的输出更加形象化一点啦。

行,让输出变得好看一点也很好实现,于是我小改了下输出部分就OK啦^_^

对了,修正版的完整代码如下:


#include 
#include 
#include 
using namespace std;

int check(int i,int *queen,int *safe,int *rdo,int *ldo,int nqueen)
{
    int j,k,su;
    static int num=0;
    for(j=1;j<=nqueen;j++)
    {
        if((safe[j]==0)&&(rdo[i+j]==0)&&(ldo[i-j+nqueen+1]==0))
        {
            queen[i]=j;
            safe[j]=1;
            rdo[i+j]=1;
            ldo[i-j+nqueen+1]=1;
            if(i>nqueen;
    cout<

顺便罗嗦一句,按照我自己的解决方法,我的 Visual C++ 6.0 是真的可以在 Windows7 下运行呢,不信你看:

唉,MS的东西就是不符合 “ 标准 ”,说MS “ 阻碍社会进步 ” 也就算了,问题是还毒害了不少 “淫民群众”。

比如那个 IE6 …… 呐,还有我现在正在用的 Visual C++ 6.0,估计90%的天朝大学,都依然在使用 Visual C++ 6.0 教学 ……

呐,如果你是一个学习 C/C++ 的人,如果你想写出更加“标准“,更加“规范”的代码话。

那么 —— 请尽量少使用 Microsoft Visual C++ !

About Mucid

My life is brilliant !
This entry was posted in Technology and tagged , , , , , . Bookmark the permalink.

106 Responses to “N皇后问题”VisualC++6.0修正版

  1. C瓜哥 says: Firefox 5.0 Firefox 5.0 Windows XP Windows XP

    你胆真大,敢在win7里面用VC6,ClassView都打不开
    好多人都不喜欢VC6,不过VC6有个很大的好处,就是运行快,同时开十个工程,机器都跑得动。再说,网上的很多资源都是VC6的,而且转换到VC.NET的工程不一定能编译得过

    • Mucid says: Firefox 5.0 Firefox 5.0 Windows 7 Windows 7

      @C瓜哥 , VS2008生成一堆无用的代码,难得删啊,其实我尽量按标准写,这样不涉及GUI的情况下,VC写的代码,在Linux下编译也没什么问题,MS真操蛋,自家的东西哦也打架……不过我安了VA插件的说

  2. cheap coach purses says: Unknown Unknown Unknown Unknown

    打不了酱油就打瞌睡嘛 :twisted:

  3. 缩阴产品排行榜 says: Unknown Unknown Unknown Unknown

    好厉害哦。。。看不懂

  4. 阿鼎 says: Unknown Unknown Unknown Unknown

    我用C-FREE。VC的话很少用!

  5. Louis Han says: Unknown Unknown Unknown Unknown

    原来是没事干的时候才会折腾code

  6. Kupid says: Unknown Unknown Unknown Unknown

    Hi!
    俺来了~
    俺没学过C++
    ……