非常難。思路:
成都創(chuàng)新互聯(lián)公司是一家專注于網(wǎng)站設(shè)計(jì)制作、網(wǎng)站設(shè)計(jì)與策劃設(shè)計(jì),績(jī)溪網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)公司做網(wǎng)站,專注于網(wǎng)站建設(shè)十載,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:績(jī)溪等地區(qū)???jī)溪做網(wǎng)站價(jià)格咨詢:028-86922220
1、設(shè)老鼠的行進(jìn)路線都是優(yōu)先選擇下-右-上-左。
2、設(shè)老鼠很聰明,走過(guò)的路線走撒泡尿,表示鼠大爺?shù)酱艘挥?,我們可以把?shù)組的值改為3,表示走過(guò),但走不通。
3、這是一個(gè)int[8][8]的二位數(shù)組,那么開(kāi)始位置下標(biāo)是1,1,結(jié)束位置是6,6。行和列分別用、j表示。
4、實(shí)際路線我們可以設(shè)置2表示,我們可以使用遞歸,讓老鼠不斷測(cè)試路線。
5、最后打印數(shù)組,看老鼠的實(shí)際路線。
1、單行(single-line)--短注釋://…… 單獨(dú)行注釋:在代碼中單起一行注釋, 注釋前最好有一行空行,并與其后的代碼具有一樣的縮進(jìn)層級(jí)。如果單行無(wú)法完成,則應(yīng)采用塊注釋。 注釋格式:/* 注釋內(nèi)容 */ 行頭注釋:在代碼行的開(kāi)頭進(jìn)行注釋。主要為了使該行代碼失去意義。 注釋格式:// 注釋內(nèi)容 行尾注釋:尾端(trailing)--極短的注釋,在代碼行的行尾進(jìn)行注釋。一般與代碼行后空8(至少4)個(gè)格,所有注釋必須對(duì)齊。 注釋格式:代碼 + 8(至少4)個(gè)空格 + // 注釋內(nèi)容 2、塊(block)--塊注釋:/*……*/ 注釋若干行,通常用于提供文件、方法、數(shù)據(jù)結(jié)構(gòu)等的意義與用途的說(shuō)明,或者算法的描述。一般位于一個(gè)文件或者一個(gè)方法的前面,起到引導(dǎo)的作用,也可以根據(jù)需要放在合適的位置。這種域注釋不會(huì)出現(xiàn)在HTML報(bào)告中。注釋格式通常寫成: /* * 注釋內(nèi)容 */ 3、文檔注釋:/**……*/ 注釋若干行,并寫入javadoc文檔。每個(gè)文檔注釋都會(huì)被置于注釋定界符 /**......*/ ...
#include stdio.h
#include iostream
#include conio.h
#include windows.h
#include time.h
using namespace std;
#define Height 25//高度,必須為奇數(shù)
#define Width 25 //寬度,必須為奇數(shù)
#define Wall 1 //用1表示墻
#define Road 0 //用0表示路
#define Start 2
#define End 3
#define up 72
#define down 80
#define left 75
#define right 78
#define flag 5
int map[Height+2][Width+2];
int x=2,y=1; //玩家當(dāng)前位置,剛開(kāi)始在入口處
class Migong
{
public:
void gotoxy(int x,int y); //移動(dòng)坐標(biāo)的函數(shù)聲明
void shengcheng(int x,int y); //隨機(jī)生成迷宮的函數(shù)聲明
void display(int x,int y); //顯示迷宮的函數(shù)聲明
void chushi(); //初始化迷宮的函數(shù)聲明
};
class Wanjia:public Migong //玩家類由迷宮類派生來(lái)
{
public:
void gonglue(int x,int y);
void shang(int x,int y);
void xia(int x,int y);
void zuo(int x,int y);
void you(int x,int y);
void game(); //游戲運(yùn)行包括移動(dòng)的函數(shù)聲明
};
void Migong::gotoxy(int x,int y) //移動(dòng)坐標(biāo) 這是使光標(biāo) 到(x,y)這個(gè)位置的函數(shù).調(diào)用 COORD 需要#include.
{
COORD coord;
coord.X=x;
coord.Y=y;
SetConsoleCursorPosition( GetStdHandle( STD_OUTPUT_HANDLE ), coord );
}
void Migong::shengcheng(int x,int y) //隨機(jī)生成迷宮
{
int c[4][2]={0,1,1,0,0,-1,-1,0}; //四個(gè)方向 //數(shù)組c 0 1 向右
// 1 0 向下
// -1 0 向上
// 0 -1 向左
int i,j,t;
//將方向打亂
for(i=0;i4;i++)
{
j=rand()%4; //隨機(jī)生成j
t=c[i][0];c[i][0]=c[j][0];c[j][0]=t; //將c[i][0]和c[j][0]交換
t=c[i][1];c[i][1]=c[j][1];c[j][1]=t; //類似上
}
map[x][y]=Road; //當(dāng)前位置設(shè)為路
for(i=0;i4;i++) //沿四個(gè)方向設(shè)置
if(map[x+2*c[i][0]][y+2*c[i][1]]==Wall) //沿c[i][0]、c[i][1]方向前2步如果是墻
{
map[x+c[i][0]][y+c[i][1]]=Road; //讓該方向前一步設(shè)為路
shengcheng(x+2*c[i][0],y+2*c[i][1]); //在該方向前兩步繼續(xù)生成地圖 因?yàn)檫@里是遞歸函數(shù),當(dāng)執(zhí)行到最后一點(diǎn)發(fā)現(xiàn)都不能走的時(shí)候,
//會(huì)返回到上一個(gè)函數(shù),也就是上一個(gè)點(diǎn),再次判斷是否可以產(chǎn)生地圖 ,知道地圖上所有點(diǎn)被遍歷完。
}
}
void Migong::display(int x,int y) //顯示迷宮
{
gotoxy(2*y-2,x-1);
switch(map[x][y])
{
case Start:
cout"入";break; //顯示入口
case End:
cout"出";break; //顯示出口
case Wall:
cout"■";break; //顯示墻
case Road:
cout" ";break; //顯示路
case up:
cout"↑";break; //在攻略中的標(biāo)記 下同
case down:
cout"↓";break;
case left:
cout"←";break;
case right:
cout"→";break;
case flag:
cout" ";break; //標(biāo)記,防止攻略遍歷時(shí)候無(wú)線循環(huán)
}
}
void Migong::chushi()
{
int i,j;
srand((unsigned)time(NULL)); //初始化隨機(jī)種子
for(i=0;i=Height+1;i++)
for(j=0;j=Width+1;j++)
if(i==0||i==Height+1||j==0||j==Width+1) //初始化迷宮 默認(rèn)四周是路
map[i][j]=Road;
else map[i][j]=Wall;
shengcheng(2*(rand()%(Height/2)+1),2*(rand()%(Width/2)+1)); //從隨機(jī)一個(gè)點(diǎn)開(kāi)始生成迷宮,該點(diǎn)行列都為偶數(shù)
for(i=0;i=Height+1;i++) //邊界處理 把最開(kāi)始默認(rèn)為路的堵上,以免跑出迷宮
{
map[i][0]=Wall;
map[i][Width+1]=Wall;
}
for(j=0;j=Width+1;j++) //邊界處理
{
map[0][j]=Wall;
map[Height+1][j]=Wall;
}
map[2][1]=Start; //給定入口
map[Height-1][Width]=End; //給定出口
for(i=1;i=Height;i++) //i初始為1,結(jié)束為height,以免畫出外圍
for(j=1;j=Width;j++) //畫出迷宮 同上
display(i,j);
}
void Wanjia::game()
{
int x=2,y=1; //玩家當(dāng)前位置,剛開(kāi)始在入口處
int c; //用來(lái)接收按鍵
while(1)
{
gotoxy(2*y-2,x-1);
cout"☆"; //畫出玩家當(dāng)前位置
if(map[x][y]==End) //判斷是否到達(dá)出口
{
gotoxy(30,24); //到達(dá)此坐標(biāo)
cout"到達(dá)終點(diǎn),按任意鍵結(jié)束";
getch();
break;
c=getch();
}
if(c!=-32)
{
c=getch();
switch(c)
{
case 72: //向上走
if(map[x-1][y]!=Wall)
{
display(x,y);
x--;
}
break;
case 80: //向下走
if(map[x+1][y]!=Wall)
{
display(x,y);
x++;
}
break;
case 75: //向左走
if(map[x][y-1]!=Wall)
{
display(x,y);
y--;
}
break;
case 77: //向右走
if(map[x][y+1]!=Wall)
{
display(x,y);
y++;
}
break;
case 112: //按下P
gonglue(2,1);break; //如果按下P執(zhí)行攻略函數(shù)
}
}
}
}
void Wanjia::shang(int x,int y)
{
if(map[x][y]==End) //判斷是否到達(dá)出口
{
gotoxy(52,20); //到達(dá)此坐標(biāo)
cout"到達(dá)終點(diǎn),按任意鍵結(jié)束";
getch();
exit(0);
}
if(map[x-1][y]!=Wallmap[x-1][y]!=upmap[x-1][y]!=downmap[x-1][y]!=leftmap[x-1][y]!=rightmap[x-1][y]!=flag)
{ //當(dāng)移動(dòng)后的下一個(gè)位置沒(méi)有被走過(guò)且不是墻
map[x][y]=up;
display(x,y);
x--;
gonglue(x,y); //遞歸,攻略下一個(gè)點(diǎn)
}
}
void Wanjia::xia(int x,int y)
{
if(map[x][y]==End) //判斷是否到達(dá)出口
{
gotoxy(52,20); //到達(dá)此坐標(biāo)
cout"到達(dá)終點(diǎn),按任意鍵結(jié)束";
getch();
exit(0);
}
if(map[x+1][y]!=Wallmap[x+1][y]!=upmap[x+1][y]!=downmap[x+1][y]!=leftmap[x+1][y]!=rightmap[x+1][y]!=flag) //當(dāng)移動(dòng)后的下一個(gè)位置沒(méi)有被走過(guò)且不是墻
{
map[x][y]=down;
display(x,y);
x++;
gonglue(x,y); //遞歸,攻略下一個(gè)點(diǎn)
}
}
void Wanjia::zuo(int x,int y)
{
if(map[x][y]==End) //判斷是否到達(dá)出口
{
gotoxy(52,20); //到達(dá)此坐標(biāo)
cout"到達(dá)終點(diǎn),按任意鍵結(jié)束";
getch();
exit(0);
}
if(map[x][y-1]!=Wallmap[x][y-1]!=upmap[x][y-1]!=downmap[x][y-1]!=leftmap[x][y-1]!=rightmap[x][y-1]!=flag) //當(dāng)移動(dòng)后的下一個(gè)位置沒(méi)有被走過(guò)且不是墻
{
map[x][y]=left;
display(x,y);
y--;
gonglue(x,y); //遞歸,攻略下一個(gè)點(diǎn)
}
}
void Wanjia::you(int x,int y)
{
if(map[x][y]==End) //判斷是否到達(dá)出口
{
gotoxy(52,20); //到達(dá)此坐標(biāo)
cout"到達(dá)終點(diǎn),按任意鍵結(jié)束";
getch();
exit(0);
}
if(map[x][y+1]!=Wallmap[x][y+1]!=upmap[x][y+1]!=downmap[x][y+1]!=leftmap[x][y+1]!=rightmap[x][y+1]!=flag) //當(dāng)移動(dòng)后的下一個(gè)位置沒(méi)有被走過(guò)且不是墻
{
map[x][y]=right;
display(x,y);
y++;
gonglue(x,y); //遞歸,攻略下一個(gè)點(diǎn)
}
}
void Wanjia::gonglue (int x,int y)
{
gotoxy(2*y-2,x-1);
cout"☆"; //畫出玩家當(dāng)前位置
if(map[x][y]==End) //判斷是否到達(dá)出口
{
gotoxy(52,20); //到達(dá)此坐標(biāo)
cout"到達(dá)終點(diǎn),按任意鍵結(jié)束";
getch();
exit(0);
}
shang(x,y); //上下左右
xia(x,y);
zuo(x,y);
you(x,y);
map[x][y]=flag; //當(dāng)上下左右都無(wú)法走的時(shí)候,即為死路,因?yàn)檫f歸函數(shù)開(kāi)始向后,所以講死路點(diǎn)值置為flag,變成無(wú)形之墻。
display(x,y);
}
int main()
{
cout" 移動(dòng)迷宮 "endl;
cout"--------------------"endl;
cout"歡迎來(lái)到移動(dòng)迷宮游戲"endl;
cout"--------------------"endl;
cout"游戲說(shuō)明:給定一出口和入口"endl;
cout"玩家控制一個(gè)五角星(☆)從入口走到出口"endl;
cout"系統(tǒng)會(huì)記錄你所走的步數(shù)"endl;
cout"按回車進(jìn)入游戲";
cout"(按下P鍵可以獲得攻略。)";
getch();
system("cls"); //清屏函數(shù) ,清除開(kāi)始界面
Wanjia w1;
w1.chushi();
w1.game(); //開(kāi)始游戲
// w1.gonglue(2,1); //功略顯示
getch();
return 0;
}
————————————————
版權(quán)聲明:本文為CSDN博主「失落之風(fēng)」的原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。
原文鏈接:
喜歡的源碼拿走,把小贊贊留下
package 走迷宮;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.TimerTask;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
// 迷宮
public class Maze extends JFrame implements ActionListener {
private JPanel panel;
private JPanel northPanel;
private JPanel centerPanel;
private MazeGrid grid[][];
private JButton restart;
private JButton dostart;
private int rows;// rows 和cols目前暫定只能是奇數(shù)
private int cols;
private ListString willVisit;
private ListString visited;
private LinkedListString comed;
private long startTime;
private long endTime;
public Maze() {
rows = 25;
cols = 25;
willVisit = new ArrayListString();
visited = new ArrayListString();
comed = new LinkedListString();
init();
this.setTitle("回溯法--走迷宮");
this.add(panel);
this.pack();
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void init() {
panel = new JPanel();
northPanel = new JPanel();
centerPanel = new JPanel();
panel.setLayout(new BorderLayout());
restart = new JButton("重新生成迷宮");
dostart = new JButton("開(kāi)始走迷宮");
grid = new MazeGrid[rows][cols];
centerPanel.setLayout(new GridLayout(rows, cols, 1, 1));
centerPanel.setBackground(new Color(0, 0, 0));
northPanel.add(restart);
northPanel.add(dostart);
dostart.addActionListener(this);
restart.addActionListener(this);
for (int i = 0; i grid.length; i++)
for (int j = 0; j grid[i].length; j++) {
if (j % 2 == 0 i % 2 == 0)
grid[i][j] = new MazeGrid(true, 20, 20);
else
grid[i][j] = new MazeGrid(false, 20, 20);
}
grid[0][0].setVisited(true);
grid[0][0].setPersonCome(true);
grid[0][0].setStart(true);
visited.add("0#0");
grid[rows - 1][cols - 1].setEnd(true);
grid = createMap(grid, 0, 0);
for (int i = 0; i grid.length; i++)
for (int j = 0; j grid[i].length; j++) {
grid[i][j].repaint();
centerPanel.add(grid[i][j]);
}
panel.add(northPanel, BorderLayout.NORTH);
panel.add(centerPanel, BorderLayout.CENTER);
}
/**
* 生成迷宮
*
* @param mazeGrid
* @param x
* @param y
* @return
*/
public MazeGrid[][] createMap(MazeGrid mazeGrid[][], int x, int y) {
int visitX = 0;
int visitY = 0;
if (x - 2 = 0) {
if (!mazeGrid[x - 2][y].isVisited()) {
willVisit.add((x - 2) + "#" + y);
}
}
if (x + 2 cols) {
if (!mazeGrid[x + 2][y].isVisited()) {
willVisit.add((x + 2) + "#" + y);
}
}
if (y - 2 = 0) {
if (!mazeGrid[x][y - 2].isVisited()) {
willVisit.add(x + "#" + (y - 2));
}
}
if (y + 2 rows) {
if (!mazeGrid[x][y + 2].isVisited()) {
willVisit.add(x + "#" + (y + 2));
}
}
if (!willVisit.isEmpty()) {
int visit = (int) (Math.random() * willVisit.size());
String id = willVisit.get(visit);
visitX = Integer.parseInt(id.split("#")[0]);
visitY = Integer.parseInt(id.split("#")[1]);
mazeGrid[(visitX + x) / 2][(visitY + y) / 2].setMark(true);
mazeGrid[visitX][visitY].setVisited(true);
if (!visited.contains(id)) {// 將這個(gè)點(diǎn)加到已訪問(wèn)中去
visited.add(id);
}
willVisit.clear();
createMap(mazeGrid, visitX, visitY);
} else {
if (!visited.isEmpty()) {
String id = visited.remove(visited.size() - 1);// 取出最后一個(gè)元素
visitX = Integer.parseInt(id.split("#")[0]);
visitY = Integer.parseInt(id.split("#")[1]);
mazeGrid[visitX][visitY].setVisited(true);
createMap(mazeGrid, visitX, visitY);
}
}
return mazeGrid;
}
/**
* 走迷宮
*
* @param mazeGrid
* @param x
* @param y
*/
public String goMaze(MazeGrid mazeGrid[][], int x, int y) {
int comeX = 0;
int comeY = 0;
// left
if (x - 1 = 0) {
if (mazeGrid[x - 1][y].isMark()) {
if (!comed.contains((x - 1) + "#" + y))
willVisit.add((x - 1) + "#" + y);
}
}
// right
if (x + 1 cols) {
if (mazeGrid[x + 1][y].isMark()) {
if (!comed.contains((x + 1) + "#" + y))
willVisit.add((x + 1) + "#" + y);
}
}
// up
if (y - 1 = 0) {
if (mazeGrid[x][y - 1].isMark()) {
if (!comed.contains(x + "#" + (y - 1)))
willVisit.add(x + "#" + (y - 1));
}
}
// down
if (y + 1 rows) {
if (mazeGrid[x][y + 1].isMark()) {
if (!comed.contains(x + "#" + (y + 1)))
willVisit.add(x + "#" + (y + 1));
}
}
if (!willVisit.isEmpty()) {
int visit = (int) (Math.random() * willVisit.size());
String id = willVisit.get(visit);
comeX = Integer.parseInt(id.split("#")[0]);
comeY = Integer.parseInt(id.split("#")[1]);
mazeGrid[x][y].setPersonCome(false);
mazeGrid[comeX][comeY].setPersonCome(true);
mazeGrid[x][y].repaint();
mazeGrid[comeX][comeY].repaint();
willVisit.clear();
comed.add(x + "#" + y);
} else {
if (!comed.isEmpty()) {
String id = comed.removeLast();
comeX = Integer.parseInt(id.split("#")[0]);
comeY = Integer.parseInt(id.split("#")[1]);
mazeGrid[x][y].setPersonCome(false);
mazeGrid[comeX][comeY].setPersonCome(true);
mazeGrid[x][y].repaint();
mazeGrid[comeX][comeY].repaint();
comed.addFirst(x + "#" + y);
}
}
return comeX + "#" + comeY;
}
int comeX = 0;
int comeY = 0;
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("重新生成迷宮")) {
refreshMap(grid);
} else if (e.getActionCommand().equals("開(kāi)始走迷宮")) {
startTime = System.currentTimeMillis();
dostart.setVisible(false);
restart.setText("禁止刷新");
int delay = 1000;
int period = 500;// 循環(huán)間隔
java.util.Timer timer = new java.util.Timer();
timer.scheduleAtFixedRate(new TimerTask() {
public void run() {
if (grid[rows - 1][cols - 1].isPersonCome()) {
endTime = System.currentTimeMillis();
JOptionPane.showMessageDialog(null, "已經(jīng)走出迷宮,耗時(shí)"
+ (endTime - startTime) / 1000 + "秒", "消息提示",
JOptionPane.ERROR_MESSAGE);
this.cancel();
restart.setText("重新生成迷宮");
} else {
String id = goMaze(grid, comeX, comeY);
comeX = Integer.parseInt(id.split("#")[0]);
comeY = Integer.parseInt(id.split("#")[1]);
}
}
}, delay, period);
}
}
/**
* 刷新地圖
*/
public void refreshMap(MazeGrid mazeGrid[][]) {
comeX = 0;
comeY = 0;
willVisit.clear();
visited.clear();
comed.clear();
this.remove(panel);
init();
this.add(panel);
this.pack();
this.setVisible(true);
}
public static void main(String args[]) {
long start = System.currentTimeMillis();
new Maze();
long end = System.currentTimeMillis();
System.out.println("使用ArrayList生成迷宮耗時(shí):" + (end - start) + "毫秒");
}
}
/**
* 在該類中創(chuàng)建了服務(wù)器端的ServerSocket,
* 當(dāng)有客戶發(fā)出連接服務(wù)器的請(qǐng)求時(shí),
* 生成與客戶端進(jìn)行通信的Socket對(duì)象。
*/
public class MultiServer {
public static void main(String args[]) throws IOException {
System.out.println("建立并等等待連接......");
// 創(chuàng)建 服務(wù)器端 ServerSocket 監(jiān)聽(tīng)5500端口
ServerSocket serverSocket = new ServerSocket(5500);
// 初始化是個(gè)socket對(duì)象
Socket connectToClient = null;
while (true) {
// 等待客戶端的連接 獲得客戶端Socket
connectToClient = serverSocket.accept();
new ServerThread(connectToClient);
}
}
}
你這while方法沒(méi)break,你確定沒(méi)問(wèn)題?
#includestdio.h
#includegraphics.h
#includeconio.h
typedef struct{
int x,y;
int dir;
}pos,elem;
typedef struct{
elem* b,* t;
int size;
}stack;
void initstack(stack* s)
{
s-b=(elem*)malloc(50*sizeof(elem));
if(s-b){
s-t=s-b;
s-size=50;
return;
}
exit(0);
}
void push(stack* s,elem* e)
{
*s-t=*e;
s-t++;
}
void pop(stack* s,elem* e)
{
*e=*--s-t;
}
void gettop(stack* s,elem* e)
{
*e=*(s-t-1);
}
void clearstack(stack* s)
{
s-t=s-b;
}
int stackempty(stack* s)
{
return !(s-t-s-b);
}
int destroystack(stack* s)
{
free(s-b);
free(s);
return 1;
}
int mg[10][10]={
{-1,-0,-1,-1,-1,-1,-1,-1,-1,-1},
{-1,-0,-0,-0,-1,-0,-0,-0,-0,-1},
{-1,-0,-1,-0,-1,-0,-1,-1,-0,-1},
{-1,-0,-1,-1,-0,-0,-0,-0,-0,-1},
{-1,-0,-0,-1,-0,-1,-1,-0,-0,-1},
{-1,-0,-0,-0,-0,-0,-1,-0,-0,-1},
{-1,-0,-1,-0,-0,-0,-0,-1,-0,-1},
{-1,-0,-1,-1,-0,-0,-0,-1,-0,-1},
{-1,-0,-0,-0,-1,-0,-0,-1,-0,-0},
{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}
};
void step(stack* s,pos* cur,stack* result);
void savepath(stack* s,pos* cur,stack* result);
void draw(int y,int x);
void step(stack* s,pos* cur,stack* result)
{
if(stackempty(result)||s-t-s-bresult-t-result-b){
for(cur-dir++;cur-dir5;cur-dir++){
setfillstyle(SOLID_FILL,15);
switch(cur-dir){
case 1:
if(!mg[cur-y-1][cur-x]){
mg[cur-y][cur-x]=1;
push(s,cur);
cur-y--;
cur-dir=0;
draw(cur-y,cur-x);
return;
}
break;
case 2:
if(!mg[cur-y][cur-x+1]){
mg[cur-y][cur-x]=1;
push(s,cur);
cur-x++;
cur-dir=0;
draw(cur-y,cur-x);
return;
}
break;
case 3:
if(!mg[cur-y+1][cur-x]){
mg[cur-y][cur-x]=1;
push(s,cur);
cur-y++;
cur-dir=0;
draw(cur-y,cur-x);
return;
}
break;
case 4:
if(!mg[cur-y][cur-x-1]){
mg[cur-y][cur-x]=1;
push(s,cur);
cur-x--;
cur-dir=0;
draw(cur-y,cur-x);
return;
}
break;
default:
exit(0);
}
}
}
mg[cur-y][cur-x]=0;
setfillstyle(SOLID_FILL,0);
draw(cur-y,cur-x);
pop(s,cur);
}
void savepath(stack* s,pos* cur,stack* result)
{
pos* top=s-t;
if(stackempty(result)){
push(result,cur);
while(tops-b)
push(result,--top);
}
else if(result-t-result-bs-t-s-b){
clearstack(result);
push(result,cur);
while(tops-b)
push(result,--top);
}
}
void draw(int y,int x)
{
bar(100+15*x,100+15*y,115+15*x,115+15*y);
}
void main(void)
{
int i;
int x,y;
int gd=DETECT,gm;
stack* s=NULL;
stack* result=NULL;
pos* cur=NULL;
initgraph(gd,gm,"");
for(x=0;x10;x++)
for(y=0;y10;y++){
if(mg[y][x]){
setfillstyle(SOLID_FILL,3);
draw(y,x);
}
}
result=(stack*)malloc(sizeof(stack));
initstack(result);
s=(stack*)malloc(sizeof(stack));
cur=(pos*)malloc(sizeof(pos));
initstack(s);
cur-x=1;
cur-y=0;
cur-dir=0;
push(s,cur);
cur-x=1;
cur-y=1;
cur-dir=1;
do{
if(cur-x==9cur-y==8)
savepath(s,cur,result);
step(s,cur,result);
}while(!stackempty(s));
if(stackempty(result))
printf("no way available");
else{
int ch=0;
printf("following is the shortest path:\n");
while(!stackempty(result)){
pop(result,cur);
setfillstyle(SOLID_FILL,15);
draw(cur-y,cur-x);
if(ch5){
putchar('\n');
ch=0;
}
printf("(%d,%d,%d) ",cur-x,cur-y,cur-dir);
ch++;
}
}
printf("\n");
destroystack(s);
destroystack(result);
free(cur);
printf("Press any key to end");
while(!kbhit());
closegraph();
}
新聞名稱:java迷宮代碼及注釋 JAVA迷宮
文章起源:http://muchs.cn/article16/hgidgg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計(jì)、動(dòng)態(tài)網(wǎng)站、ChatGPT、商城網(wǎng)站、營(yíng)銷型網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)