UVa816的一些問題

2021-10-03 16:20:02 字數 2010 閱讀 2429

#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...