论坛交流
首页办公自动化| 网页制作| 平面设计| 动画制作| 数据库开发| 程序设计| 全部视频教程
应用视频: Windows | Word2007 | Excel2007 | PowerPoint2007 | Dreamweaver 8 | Fireworks 8 | Flash 8 | Photoshop cs | CorelDraw 12
编程视频: C语言视频教程 | HTML | Div+Css布局 | Javascript | Access数据库 | Asp | Sql Server数据库Asp.net  | Flash AS
当前位置 > 文字教程 > C语言程序设计教程
Tag:新手,函数,指针,数据类型,对象,Turbo,入门,运算符,数组,结构,二级,,tc,游戏,试题,问答,编译,视频教程

求从棋盘的坐下角到右上角的无环路的总数

文章类别:C语言程序设计 | 发表日期:2008-9-24 14:45:39

#include"stdio.h"
#define N 8          //因为算出来的数据太大,所以要算很久,可以改变N的值进行测试。
#include"iostream.h" //此算法采用回溯法

enum bin{fal,tr};    //假如有更好的算法,请发e-mail给我。在此谢过。
int top=0;
long int num=0;
int row[]={-1,-2,-2,-1,1,2,2,1};
int col[]={-2,-1,1,2,2,1,-1,-2};
bin mark[N][N];

struct stack
{
  int x,y;
  int dir;}board[N*N];

void push(stack it)
{
  board[top].x=it.x;
  board[top].y=it.y;
  board[top].dir=it.dir;
  mark[board[top].x][board[top].y]=tr;
  top++;
  }
 
stack pop()
{
  --top;
  mark[board[top].x][board[top].y]=fal;
  board[top].dir++;
  return board[top];
  }
 
bin empty()
{
  if(top==0) return tr;
  else return fal;
  }
 
void main()
{
  stack temp={N-1,N-1,-1};
  push(temp);
  while(!empty())
  {
    int g,h;
    temp=pop();
    int i=temp.x;
    int j=temp.y;
    int dir=temp.dir;
    while(dir<8)
    {
      g=i+row[dir];
      h=j+col[dir];
      if((g<0)||(h<0)||(g>=N)||(h>=N)||mark[g][h]) dir++;
      else {
             if(g==0&&h==0) {num++;dir++;}
             else {
                   temp.x=i;
                   temp.y=j;
                   temp.dir=dir;
                   push(temp);
                   i=g;
                   j=h;
                   dir=0;
                   }//else
             }//else
      }//while
    }//while
  cout<<"the total number is:"<<num;
  getchar();
  }//main

上一篇:{应用}实用算法(基础算法-递推法-02) 人气:5411
下一篇:{应用}图遍历应用 人气:6578
视频教程列表
文章教程搜索
 
C语言程序设计推荐教程
C语言程序设计热门教程
看全部视频教程
购买方式/价格
购买视频教程: 咨询客服
tel:15972130058