今天加入苏苏的项目里面了。身为一个大水货……一头雾水听了项目介绍,就开始最基本的环境配置了……基本的要死。还是不会= =。

昨天在新买的二手电脑上装了WIN8.1,今天就因为项目软件的原因要换成win7 32位,可怜了我的8G内存。。。

嗯。首先是用到了ODBC数据源管理器。应用程序要访问一个数据库,首先必须用ODBC管理器注册一个数据源,管理器根据数据源提供的数据库位置、数据库类型及ODBC驱动程序等信息,建立起ODBC与具体数据库的联系。这样,只要应用程序将数据源名提供给ODBC,ODBC就能建立起与相应数据库的连接。

具体的设置,就是打开ODBC数据源管理器。看是个人用了还是全用户用了,对于我这个个人电脑来说实际选哪个都无所谓,就选择系统DSN。然后添加,前提是装了MySQL数据库(这里使用的是南瑞专用的数据库),然后,添加的时候,选择MySQL ODBC 3.51 Driver 。如下图设置:

1

2

数据库给了一个压缩包,直接将db文件夹复制到mysql程序目录下的data目录中即可。跟以前的执行SQL语句方式不同……不过db上一层目录的那个文件中有一个FDB文件,应该是FirebirdDB数据库文件。

用到了两个插件,一个是形成Excel表格的插件,名字叫:Microsoft.Office.Interop.Excel,不过这个默认的时候,就可以直接引用。另外一个插件是MySQLDriverCS,需要另外安装。

MySQLDriverCS是MySQL数据库的一个免费开源的.NET驱动程序。和Sql .NET Data Provider是为Sql Server一样,它是专门为MySQL设计的,可以叫做MySQL .NET Data Provider。使用他不需要额外的去设置ODBC数据源,基本上只要能连接到MySQL就能通过MySQLDriverCS来访问。这个。没有测试不设置ODBC数据源是否能够访问。不过应该是可以的。。之前报错是因为一直没有安装插件的缘故。

另外百度百科上说明,这个只支持32位,不支持64位。

 

电力系统中限制短路电流的措施有:采用分裂绕组变压器、分裂电抗器、限流电抗器、变压器分列运行、环网解环运行等等

n-1原则(N-1准则):判定电力系统安全性的一种准则。又称单一故障安全准则。按照这一准则,电力系统的N个元件中的任一独立元件(发电机、输电线路、变压器等)发生故障而被切除后,应不造成因其他线路过负荷跳闸而导致用户停电;不破坏系统的稳定性,不出现电压崩溃等事故。

广度优先搜索与深度优先搜索

广度优先搜索与深度优先搜索是两种针对图、树常用的搜索算法,前者的实现原理是利用queue的特性,其算法思想被称为“分枝定界”,后者的实现原理是利用stack的特性,其算法思想被称为回溯(backtracking),下面我们以数组定义的简化模型来实现这两种算法。

假设我们用数组定义了一个迷宫,要找这个数组中两点之间的路径,比如{0,0}和{9,9}。

char board[MAZE_SIZE][MAZE_SIZE] = {
        {0,1,1,1,1,1,0,0,0,0},
        {0,0,0,0,0,1,0,1,0,0},
        {0,0,0,1,0,1,0,0,0,0},
        {0,1,0,1,0,1,0,1,1,0},
        {0,1,0,1,0,1,0,1,0,0},
        {0,1,1,1,0,1,0,1,0,1},
        {0,1,0,0,0,1,0,1,0,1},
        {0,1,0,1,1,1,0,1,0,0},
        {1,0,0,0,0,0,0,1,0,0},
        {0,0,0,0,1,1,1,1,0,0}};

首先我们定义一个Step函数,在某个point上的某个方向试图走出一步,如果能走则返回true,否则返回false。

bool Step(Position& pos, int& dir)
    {
       int offsetx[DIRECTION] = {1,0,-1,0};
       int offsety[DIRECTION] = {0,-1,0,1};
       dir = dir%DIRECTION;

       int tempx = pos.x + offsetx[dir];
       int tempy = pos.y + offsety[dir];

       if(tempx<0 || tempx>=MAZE_SIZE || tempy<0 || tempy>=MAZE_SIZE
           || board[tempy][tempx]==1)
           return false;

       pos.x = tempx;
       pos.y = tempy;
       return true;
    }

广度优先是将与当前位置相邻且尚未遍历的point push进queue中,然后不停的将queue中的element pop出来重复前面的动作,这样就使得跟起诉位置越近的点越先处理,能找出一条两点之间最短的路径。

    bool WFS(Position begin, Position& end)
    {
       std::queue<Position> posQueue;
       posQueue.push(begin);
       while(!posQueue.empty())
       {
           Position pos = posQueue.front();
           if(pos == end)
              return true;
           board[pos.y][pos.x] = 1;

           int dir=0;
           while(dir < DIRECTION)
           {
              pos = posQueue.front();
              if(Step(pos, dir))
                  posQueue.push(pos);
              dir++;
           }
           posQueue.pop();
       }
       return false;
    }

深度优先是将与当前point相邻的某个element push进stack中,直到找不到要寻找的点才将stack中的element pop出来,再从该element其他方向的相邻element中寻找

 bool DFS(Position begin, Position end)
    {
       std::stack<Position> posStack;
       Position pos, lastpos;
       pos = begin;
       while(pos.x!=end.x || pos.y!=end.y)
       {
           lastpos = pos;
           int dir=0;
           while(dir < DIRECTION)
           {
              if(Step(pos, dir))
                  break;
              dir++;
           }

           if(!(pos==lastpos))
           {
              board[pos.y][pos.x] = 1;
              posStack.push(lastpos);
           }
           else
           {
              if(posStack.empty())
                  return false;
              pos = posStack.top();
              posStack.pop();
           }
       }

       return true;
    }

递归和stack的实现有着类似的逻辑,而且可以写的更加简洁:

bool Recursion(Position pos, Position& end)
    {
       if(pos == end)
           return true;

       Position cur = pos;
       board[pos.y][pos.x] = 1;
       int dir=0;
       while(dir < DIRECTION)
       {
           pos = cur;
           if(Step(pos, dir) && Recursion(pos, end))
              return true;
           dir++;
       }
       return false;
    }
最后修改:2021 年 07 月 29 日
如果觉得我的文章对你有用,请随意赞赏