设为首页 加入收藏

TOP

C语言重解经典回溯算法案例-迷宫问题(二)
2018-03-02 06:57:26 】 浏览:1215
Tags:语言 经典 回溯 算法 案例 迷宫 问题
t[i]=(int *) malloc(n*sizeof(int));          //初始化标志迷宫矩阵每一位置是否已走过的矩阵
        for (j=0; j<n; j++)
            *(t[i]+j)=0;
    }


    head=(Record1 *) malloc(sizeof(Record1));
    psnewbe=head;
    psnewaf=head;                            //初始化双向链表栈
    head->next=NULL;
    head->before=NULL;


    head1=(Long1 *) malloc(sizeof(Long1));
    head1->next=NULL;
    psnew1=head1;


    flag=0;  //初始化标志是否存在走出迷宫路径的标志变量
    Num=0;


    i=0;
    j=0;  //初始化当前单元行列标,将迷宫左上角单元作为出发点
    k=0;  //方向参数初始化为0,对左上角单元从头开始试探可走方向


loop: if (trial(i, j, k, n, m, p, t)==0)  //回溯试探开始
      {
          if (i==0&&j==0)  //在起始点已无方向可走,回溯结束
          {
              goto exit;
          }
          else
          {
              if (k==0)    //(i,j)元的所有方向均不可走,回溯
              {
                  i=psnewaf->x;
                  j=psnewaf->y;
                  k=psnewaf->mark;
                  goto loop;
              }
              else  //在(i,j)元上沿k方向后的所有方向均不可走,回溯
              {
                  *(t[i]+j)=0;
                  free (psnewaf);
                  psnewbe->next=NULL;
                  psnewaf=psnewbe;            //(i,j)元节点弹出栈
                  psnewbe=psnewbe->before;
                  i=psnewaf->x;
                  j=psnewaf->y;
                  k=psnewaf->mark;
                  goto loop;
              }
          }
      }
      else
      {
          if (k==0)  //从头开始为(i,j)元找到了可走方向trial(i, j, k, n, m, p, t)
          {
              current=(Record1 *) malloc(sizeof(Record1));
              current->x=i;                             
              current->y=j;                              //建立(i,j)元节点
              current->ma

首页 上一页 1 2 3 4 5 6 7 下一页 尾页 2/11/11
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C语言编程构造拉丁方阵和正交拉丁.. 下一篇C语言实现N皇后问题非递归求解

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目