這道題個人認為隱含著狀態轉換,所以想到的還是bfs,將其中一位數加一或減一或交換臨近兩位,進入下一狀態,使用乙個大小為10000的bool陣列判重,由於bfs的特性,得到的一定是最小步數;
普通bfs**如下:
#include
#include
#include
#include
using
namespace
std;
const
int maxsize = 1e5;
typedef
struct nodenode;
node q[maxsize];
bool visit[10005];
bool search_table(int *a)
int bfs(int *start,int *goal)
}for(int i=0;i<4;i++)
}for(int i=0;i<3;i++)
}head=(head+1)%maxsize;
}return -1;
}void input_data(int *start,int *goal)
int main()
}
雙向bfs:
#include
#include
#include
using
namespace
std;
int visit[10005];
const
int maxsize = 1e5;
typedef
struct nodenode;
node start,goal;
int trans(node x)
node q1[maxsize],q2[maxsize];
int bfs()
}for(int i=0;i<4;i++)
}for(int i=0;i<3;i++)
}head1=(head1+1)%maxsize;
}cnt = (tail2-head2+maxsize)%maxsize;
while(cnt--)
}for(int i=0;i<4;i++)
}for(int i=0;i<3;i++)
}head2 = (head2+1)%maxsize;}}
}void input_and_solve()
int main()
}
神奇密碼鎖(BFS)
題目鏈結 題目描述 小明忘記了旅行箱上的密碼,現在他想自己暴力弄出密碼來,但他又想知道最從乙個數字到另乙個數字最少需要多少步,現在請你幫忙。另外,小明的密碼箱很奇怪,只有四位數,上面的數字只有1到9,每次只能讓每位數加1或者減1。按常識我們可以知道從1到9只需要減1,從9到1只需要加1。此外,你還能...
電子密碼鎖
最近剛寫乙個電子密碼鎖的程式,使用verilog語言實現的。剛剛學這個語言,練習一下。感覺這個語言不是很難,而且通過學這個語言,感覺自己還能通過自學掌握一門語言,挺有成就感的。雖然現在只懂verilog最基本的一些語法,但是通過不斷練習我會不加深入的掌握它,也有信心自學更多的。加油!密碼輸入 刪除模...
實用密碼鎖
unsigned char num,i,j unsigned char passwordtemp 16 最大輸入16個 unsigned char inputtimes 密碼輸入錯誤次數 unsigned char passwordlength,plen 輸入密碼長度,實際密碼長度 bit flag...