欧美大屁股bbbbxxxx,狼人大香伊蕉国产www亚洲,男ji大巴进入女人的视频小说,男人把ji大巴放进女人免费视频,免费情侣作爱视频

歡迎來(lái)到入門教程網(wǎng)!

C語(yǔ)言

當(dāng)前位置:主頁(yè) > 軟件編程 > C語(yǔ)言 >

C語(yǔ)言使用深度優(yōu)先搜索算法解決迷宮問(wèn)題(堆棧)

來(lái)源:本站原創(chuàng)|時(shí)間:2020-01-10|欄目:C語(yǔ)言|點(diǎn)擊: 次

本文實(shí)例講述了C語(yǔ)言使用深度優(yōu)先搜索算法解決迷宮問(wèn)題。分享給大家供大家參考,具體如下:

深度優(yōu)先搜索

偽代碼

(Pseudocode)如下:

將起點(diǎn)標(biāo)記為已走過(guò)并壓棧;
while (棧非空) {
從棧頂彈出一個(gè)點(diǎn)p;
if (p這個(gè)點(diǎn)是終點(diǎn))
break;
否則沿右、下、左、上四個(gè)方向探索相鄰的點(diǎn)
if (和p相鄰的點(diǎn)有路可走,并且還沒(méi)走過(guò))
將相鄰的點(diǎn)標(biāo)記為已走過(guò)并壓棧,它的前趨就是p點(diǎn);
}
if (p點(diǎn)是終點(diǎn)) {
打印p點(diǎn)的坐標(biāo);
while (p點(diǎn)有前趨) {
p點(diǎn) = p點(diǎn)的前趨;
打印p點(diǎn)的坐標(biāo);
}
} else
沒(méi)有路線可以到達(dá)終點(diǎn);

C語(yǔ)言代碼:

#include <stdio.h>
#define MAX_ROW 5
#define MAX_COL 5
struct point { int row, col; } stack[512];
int top = 0;
void push(struct point p)
{
  stack[top++] = p;
}
struct point pop(void)
{
  return stack[--top];
}
int is_empty(void)
{
  return top == 0;
}
int maze[MAX_ROW][MAX_COL] = {
  0, 1, 0, 0, 0,
  0, 1, 0, 1, 0,
  0, 0, 0, 0, 0,
  0, 1, 1, 1, 0,
  0, 0, 0, 1, 0,
};
void print_maze(void)
{
  int i, j;
  for (i = 0; i < MAX_ROW; i++) {
  for (j = 0; j < MAX_COL; j++)
  printf("%d ", maze[i][j]);
  putchar('\n');
  }
  printf("*********\n");
}
struct point predecessor[MAX_ROW][MAX_COL] = {
  {{-1,-1}, {-1,-1}, {-1,-1}, {-1,-1}, {-1,-1}},
  {{-1,-1}, {-1,-1}, {-1,-1}, {-1,-1}, {-1,-1}},
  {{-1,-1}, {-1,-1}, {-1,-1}, {-1,-1}, {-1,-1}},
  {{-1,-1}, {-1,-1}, {-1,-1}, {-1,-1}, {-1,-1}},
  {{-1,-1}, {-1,-1}, {-1,-1}, {-1,-1}, {-1,-1}},
};
void visit(int row, int col, struct point pre)
{
  struct point visit_point = { row, col };
  maze[row][col] = 2;
  predecessor[row][col] = pre;
  push(visit_point);
}
int main(void)
{
  struct point p = { 0, 0 };
  maze[p.row][p.col] = 2;
  push(p);
  while (!is_empty()) {
    p = pop();
    if (p.row == MAX_ROW - 1 /* goal */     && p.col == MAX_COL - 1)
    break;
    if (p.col+1 < MAX_COL /* right */  && maze[p.row][p.col+1] == 0)
      visit(p.row, p.col+1, p);
    if (p.row+1 < MAX_ROW /* down */ && maze[p.row+1][p.col] == 0)
      visit(p.row+1, p.col, p);
    if (p.col-1 >= 0 /* left */ && maze[p.row][p.col-1] == 0)
      visit(p.row, p.col-1, p);
    if (p.row-1 >= 0 /* up */  && maze[p.row-1][p.col] == 0)
      visit(p.row-1, p.col, p);
    print_maze();
  }
  if (p.row == MAX_ROW - 1 && p.col == MAX_COL - 1)
  {
    printf("(%d, %d)\n", p.row, p.col);
    while (predecessor[p.row][p.col].row != -1) {
      p = predecessor[p.row][p.col];
      printf("(%d, %d)\n", p.row,
      p.col);
    }
  } else
    printf("No path!\n");
    return 0;
}

希望本文所述對(duì)大家C語(yǔ)言程序設(shè)計(jì)有所幫助。

網(wǎng)頁(yè)制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語(yǔ)言數(shù)據(jù)庫(kù)服務(wù)器

如果侵犯了您的權(quán)利,請(qǐng)與我們聯(lián)系,我們將在24小時(shí)內(nèi)進(jìn)行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負(fù)任何責(zé)任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有