yiyi挑戰 2 1搜尋

2021-07-24 20:35:53 字數 2884 閱讀 4222

一.

題意:乙個格仔矩陣,有路有牆,給起點,問能走到的格仔有多少。

資料範圍:20*20

解題:dfs,填湖標記

#include

#include

char b[30][30];

int cnt;

int n,m;

void dfs(int x,int y)

}int main()

dfs(x,y);

printf("%d\n",cnt);

}return

0;}

二.

題意:第一象限,整數座標背景;m個炸彈,分別在時間ti於(xi,yi)**,周圍四塊一併炸毀。人在原點,問最少幾步跑到安全地點,跑不到輸出-1。

資料範圍:m【1,50000】、 xi,yi【0,300】、ti【0,1000】

解題:預處理出安全地區a 和必要的炸彈(時間排序,重複炸的濾掉),bfs按時間先出隊炸彈後人。

注意:c標記出過隊的地點,b標記能走的,省略c會超時。

#include

#include

#include

#include

using

namespace

std;

int a[430][430];

int b[430][430];

int c[430][430];

int fx[4][2]=,,,};

struct fg

m[60050];

int num,t,p;

queue

q;int cmp(fg x,fg y)

m[num].x=x,m[num].y=y,m[num++].time=tt;

}fg gg;

int ans=-1;

p=0;

gg.x=gg.y=gg.time=0;

q.push(gg);

while(!q.empty())

if(c[x][y])continue;/

c[x][y]=b[x][y]=1;

for(;p1;p++)

b[m[p].x][m[p].y]=b[(m[p].x)+1][m[p].y]=b[(m[p].x)-1][m[p].y]=b[m[p].x][(m[p].y)+1]=b[m[p].x][(m[p].y)-1]=1;

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

}printf("%d\n",ans);

}return

0;}

三.

題意:n個不重複個位數,遞增的順序輸入;問拼成兩個整數,倆數差的絕對值最小是多少,多位數不能以0開頭。

資料範圍:n【1,10】

解題:2和10特判,剩下9!全排列對稱截。

注意:1.用do while(); 2.多位數不能以0開頭

#include

#include

#include

using

namespace

std;

int a[15];

int ans;

int main()

y=0;for(int i=n/2;i10;y+=a[i];}

zz=x>y?x-y:y-x;//printf("y:%d\n",y);

if(ans>zz)ans=zz;

}while(next_permutation(a,a+n));

}printf("%d\n",ans);}}

return

0;}

四.

題意:n個數(1,2,3……n)以位置順序排列,往下n-1行為上行兩兩相加,最後剩餘乙個數字s,給出n,s求這n個數的最初排列。

資料範圍:n【1,10】

解題:預處理乙個楊輝三角的表,全排列乘乘加加。

#include

#include

using

namespace

std;

int a[15][15];

int b[15];

int main()

long

long ssum;

while(scanf("%d%i64d",&n,&sum)!=eof)

while(next_permutation(b,b+n));

for(int i=0;iprintf("%d ",b[i]);

printf("\n");

}return

0;}

五.

題意:5*5格仔存放個位數,問連通情況下(四方象),能組成多少個不同的六位數,前導零不忽略。

解題:裸dfs沒剪枝,c標記六位數,b標記邊界。

#include

#include

int a[10][10];

int b[10][10];

int c[1000000];

int fz[4][2]=,,,};

int ans;

void dfs(int h,int l,int cc,int sum)

//printf("sssssssssss%d\n",sum);

}else}}

}int main()

// memset(b,0,sizeof(b));

memset(c,0,sizeof(c));

ans=0;

for(int i=1;i<6;i++)

for(int j=1;j<6;j++)dfs(i,j,0,0);

printf("%d\n",ans);

}return

0;}

(挑戰程式設計 2 1)Jolly Jumpers

include include include include include include using namespace std define my debug 能處理的最大數 const int max num 3010 暫存陣列 int arr max num 當前處理資料大小 int n...

物件搜尋演算法挑戰

寫乙個 function方法,它遍歷乙個物件陣列 第乙個引數 並返回乙個包含相匹配的屬性 值對 第二個引數 的所有物件的陣列。如果返回的陣列中包含 source 物件的屬性 值對,那麼此物件的每乙個屬性 值對都必須存在於 collection 的物件中。例如,如果第乙個引數是 第二個引數是,那麼你必...

挑戰程式設計競賽 2 1迷宮的最短路徑

迷宮的最短路徑 給定乙個大小為n m 的迷宮,迷宮由通道和牆壁組成,每一步可以向鄰接的上下左右四個格的通道移動。請求出從起點到終點所需要的最小步數,請注意,本體假設從起點一定可以移動到終點。限制條件 n,m 100 輸入 s g 輸出 include include using namespace ...