hdoj1728 搜尋的兩種寫法

2021-07-14 14:54:57 字數 1979 閱讀 6953

以前的一道題目,現在拿到總覺得是dfs,然後t掉就沒什麼想法了,很狗的看了以前的寫法(以前還是看題解的ac的),是bfs,每次都要轉彎,但是之前你的達到一種他走到了死路,所以才是不得不轉彎,寫法也是非常棒,預處理的轉彎數是-1就可以達到一開始轉彎的+1抵消。

dfs寫法:

中間判斷兩個條件,如果是起點,不是起點,然後剪枝的話,就是有flag直接return,還有那個點不行也return,主要是轉彎數不行或者點不是都要return。

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

typedef

long

long ll;

#define pi acos(-1.0)

const

int n=1e2+10;

bool vis[n][n];

int n,m;

char ma[n][n];

int sx,sy;

int ex,ey;

int k;

int dx[4]=;

int dy[4]=;

int flag;

struct asd;

bool judge(int x,int y)

queue

q;void bfs()

asd now,ne;

now.x=sx;now.y=sy;

now.num=-1;

vis[now.x][now.y]=1;

q.push(now);

while(!q.empty())

q.push(ne);

}ne.x+=dx[i];

ne.y+=dy[i];}}

}}int main()

return

0;}

dfs寫法

#include 

using

namespace

std;

typedef

long

long ll;

typedef

unsigned

long

long ull;

typedef pair pi;

typedef pair< pi, int> pii;

const

double eps=1e-5;

const

double pi=acos(-1.0);

const

int mod=1e9+7;

const

int inf=0x3f3f3f3f;

const

int n=110;

char ma[n][n];

int vis[n][n];

int n,m,num;

int sx,sy,tx,ty,flag;

int dx[4]=;

int dy[4]=;

void dfs(int x,int y,int d)

for(i=0;i<4;i++)

dfs(xx,yy,i);

}}int main()

scanf("%d%d%d%d%d",&num,&sy,&sx,&ty,&tx);

sy--;sx--;tx--;ty--;

flag=0;

memset(vis,1,sizeof(vis));

vis[sx][sy]=0;

dfs(sx,sy,-1);

if(flag) printf("yes\n");

else

printf("no\n");

}return

0;}

flume兩種寫法

1.全寫 bin flume ng agent conf conf name a1 conf file job flume netcat logger.conf dflume.root.logger info,console 2.簡寫 bin flume ng agent n a1 c conf f...

氣泡排序的兩種寫法

public static void main string args function1 a function2 a public static void function1 int a system.out.println system.out.println 第 i 1 次迴圈完成 syste...

全排列的兩種寫法

對於陣列 1,2,3 他們按照從小到大的全排列是 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1 現在給你乙個正整數n,n小於8,輸出陣列 1,2,n 的從小到大的全排列。由出口遞迴回溯時,至少返回2層,第一次因為if語句,第二次因為不滿足for迴圈條件 include in...