搜尋 問題 D 神奇密碼鎖

2021-08-04 02:12:49 字數 1336 閱讀 4314

這道題個人認為隱含著狀態轉換,所以想到的還是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...