#include#include#include#include;
using namespace std;
int sx,sy,sx1,sy1,fx,fy;//sx,sy代表出發座標 fx,fy代表終點
typedef structnode;
const char *dirs="nesw";//順時針轉
const char *turns="flr";
const int maxn=15;
node p[maxn][maxn][4];// p[r][c][dir]儲存了狀態(r,c,dir)在bfs樹中的父節點
int has_edge[maxn][maxn][4][3],d[maxn][maxn][4];//d[r][c][dir]表示初始狀態到(r,c,dir)的最短長度
//has_edge[r][c][dir][turn]表示當前狀態為(r,c,dir)是否可以沿著turn走
char dir0;//代表一開始的方向
int dir_id(char c)
int turn_id(char c)
int mov[4][2]=,,,};
node walk(node t,int turn)
if(turn==2)
node new1=;
return new1;
}bool inside(int r,int c)
void print_ans(node u)
node start=;
edges.push_back(start);
int cnt=0;
for(int i=edges.size()-1;i>=0;i--)
if(cnt%10!=0)
printf("\n");
}void bfs();
d[sx1][sy1][dir_id(dir0)]=0;
q.push(n);
// cout
cin>>sx>>sy>>dir0>>fx>>fy;
int id=dir_id(dir0);
sx1=sx+mov[id][0];
sy1=sy+mov[id][1];
memset(has_edge,0,sizeof(has_edge));
memset(p,0,sizeof(has_edge));
string line;
stringstream ss;
int x,y;
string str;
while(getline(cin,line)&&line!="0"){
ss<>x>>y;
while(ss>>str){
if(str[0]!='*'){
char dir=str[0];
int id=dir_id(dir);
for(int i=1;i終於,看著紫書和看看別人的**完成了。但是!!
我認為初始狀態d[sx][sy][dir0]不能初始化為0 因為如果起點和終點一樣的話,如果再次以同樣的方向進入終點,if(d[fx][fy][dir]<0)不成立,直接返回,導致無解。但是我在其他部落格看到的** 將d[sx][sy][dir0]初始化為0 ,仍然能ac,很奇怪。。
輸入:(自己造的)
sample
2 1 n 2 1
1 1 wl nr *
1 2 wlf nr er *
1 3 nl er *
2 1 sl wr nr *
2 2 sf wf erf *
2 3 sr el *
3 2 sr *
3 1 wr *
0這是我的
這是網上的
String 一些問題
前言 等號 對於基本型別,比較的是值,對於引用型別,比較的是記憶體位址。1.在物件池中建立,如果常量池中已經存在則返回常量池中已經有的。private static void test1 結果 true 2.乙個在string pool中,乙個在堆中。private static void test...
C 一些問題
1 if else語句和switch case語句的效率分析對比 switch效率高。switch的效率與分支數無關,當只有分支比較少的時候,if效率比switch高,因為switch有跳轉表。分支比較多,那當然是switch 根據大量的實際程式測試 不考慮不同的編譯器優化程度差異,假設都是最好的優...
mysql 一些問題
1 中文亂碼 問題 推薦用 uft 8 編碼 適配一切介面,mysql中 發生中文亂碼時 開啟mysql 安裝路徑 更改後 重啟mysql 服務即可,有時也需要 重新匯入資料庫 可能是與 source 檔案時 編碼沒有設定好 client password your password port 33...