【遊戲公司日常——第12至16天】:Jira解決&迷宮演算法
阿新 • • 發佈:2018-12-17
實習第12-16天
日常修改預製體與lua指令碼,涉及問題:
介面調整,等以後那天有意義的bug再記錄好了
日常習慣
求解一個解(非最優==可以想下為什麼)
#include<stdio.h> #define r 4 #define c 4 //表示移動的四個方向 int Move[4][2]={ {0,1}, {1,0}, {-1,0}, {0,-1} }; //表示迷宮 int m[r+2][c+2]={ {1,1,1,1,1,1}, {1,0,0,1,0,1}, {1,1,0,1,0,1}, {1,0,0,1,0,1}, {1,0,0,0,0,1}, {1,1,1,1,1,1} }; //表示走過的路 int t[r+2][c+2]={0}; int Maze(int x,int y) { //到達終點 if(x==1 && y==4) { printf("(%d,%d)-->",x,y); return 1; } //往四個方向走 for(int i=0;i<4;i++) { int a=x+Move[i][0]; int b=y+Move[i][1]; //如果移動的位置不是牆,且木有走過 if(m[a][b]!=1 && t[a][b]!=1) { t[a][b]=1;//把該位置佔 int flag=Maze(a,b);//繼續往下走 //flag用來是區別到達終點,還是不符合往回走 if(flag) { printf("(%d,%d)--->",x,y); return 1; } } } return 0; } int main(void) { t[1][1]=1; Maze(1,1); return 0; }
顯示所有解
#include<stdio.h> #define r 4 #define c 4 int Move[4][2]={ {0,1}, {1,0}, {-1,0}, {0,-1} }; int m[r+2][c+2]={ {1,1,1,1,1,1}, {1,0,0,1,0,1}, {1,1,0,0,0,1}, {1,0,0,1,0,1}, {1,0,0,0,0,1}, {1,1,1,1,1,1} }; int t[r+2][c+2]={0}; int s[r*c][2];//用棧,存放走過的路徑 int top=-1;//棧頂指標 int cnt=0;//統計情況 void show() { printf("%d:\n",++cnt); for(int i=0;i<=top;i++) { printf("(%d,%d)-->",s[i][0],s[i][1]); } printf("\n"); } void Maze(int x,int y) { int i,a,b; if(x==1 && y==4) { show(); return; } for(i=0;i<4;i++) { a=x+Move[i][0]; b=y+Move[i][1]; if(m[a][b]!=1 && t[a][b]!=1) { t[a][b]=1; s[++top][0]=a; s[top][1]=b; Maze(a,b); t[a][b]=0; top--; } } } int main(void) { t[1][1]=1; s[++top][0]=1; s[top][1]=1; Maze(1,1); return 0; }
還有一種去除t陣列的方法
m[a][b]=1;
s[++top][0]=a;
s[top][1]=b;
Maze(a,b);
m[a][b]=0;
top--;
所有資料可以存在數組裡面,同樣可以存到一個連結串列內,多個連結串列存到最優解中
typedef struct elem{ int now[2]; struct elem *nextstep; }Step;
typedef struct node{ int allstep; Step *nextstep; struct node *next; }ElemSN;
多加班一天=.= 專案內一測ヾ(◍°∇°◍)ノ゙