搜索zhuanti
I - Lake Counting
?由于最近的降雨,農夫約翰的農田里形成了不同位置的水塘。農田被表示為一個矩形,它包含了 N x M (1 <= N <= 100; 1 <= M <= 100) 個小方格。每個方格中,要么包含了水 ('W'),要么包含了旱地 ('.')。農夫約翰想要弄清楚,他的農田中形成了多少個水塘。一個水塘是由包含了水的方格連通而成,這里一個方格被視作與周圍的全部八個方格相鄰。?
給出農夫約翰的農田數據圖,判斷圖中有多少個水塘。
輸入
* 第一行:兩個以空格分隔的整數: N 和 M?
* 第 2..N+1 行:每行 M 個字符,表示農夫約翰的農田中的一行。每個字符要么是 'W' 要么是 '.'。字符之間沒有空格。
輸出
* 第一行:農夫約翰的農田中,水塘的數量。
示例輸入
10 12 W........WW. .WWW.....WWW ....WW...WW. .........WW. .........W.. ..W......W.. .W.W.....WW. W.W.W.....W. .W.W......W. ..W.......W.示例輸出
3提示
輸出細節:?
有 3 個水塘:一個位于左上方,一個位于左下方,還有一個位于右邊。
Sponsor
#include <iostream> #include <vector> using namespace std;//深度優先搜索,從x,y這一點向周圍八個點搜索 void DFS(vector<vector<char> >& g,int n,int m,int x,int y) {//每次向周圍搜索前,先將x,y這點置為'.',可以理解為遍歷過就當作是干地,下次不再遍歷g[x][y] = '.';//向周圍八個點開始搜索for (int i = -1; i <= 1; i++) //i = -1的意思是,從(x,y)點的最左邊開始搜索{for (int j = -1; j <= 1; j++) //j = -1 的意思是,從(x,y)點的最上邊開始搜索{//先判斷是否超過范圍,再判斷是否是水池‘W’,如果是,則以這一點繼續深搜if (x + i >= 0 && x + i < n && y + j >= 0 && y + j < m && g[x + i][y + j] == 'W')DFS(g, n, m, x + i, y + j);}}}//求水洼數量 int LakeCounting(vector<vector<char> >& g,int n,int m) {int res = 0;for (int i = 0; i < n; i++){for (int j = 0; j < m; j++){if (g[i][j] == 'W'){DFS(g,n,m,i,j); //這里的DFS調用相當于搜索極大連通圖,DFS里面的是小連通圖++res; //極大連通圖的數量就是水洼的數量}}}return res; }int main() {int n = 0, m = 0;cin >> n >> m;vector<vector<char> > g(n);//輸入for (int i = 0; i < n; i++){g[i].resize(m);for (int j = 0; j < m; j++)cin >> g[i][j];}//輸出的cout << LakeCounting(g,n,m) << endl;return 0; }A - 棋盤問題
在一個給定形狀的棋盤(形狀可能是不規則的)上面擺放棋子,棋子沒有區別。要求擺放時任意的兩個棋子不能放在棋盤中的同一行或者同一列,請編程求解對于給定形狀和大小的棋盤,擺放k個棋子的所有可行的擺放方案C。
Input
輸入含有多組測試數據。?
每組數據的第一行是兩個正整數,n k,用一個空格隔開,表示了將在一個n*n的矩陣內描述棋盤,以及擺放棋子的數目。 n <= 8 , k <= n?
當為-1 -1時表示輸入結束。?
隨后的n行描述了棋盤的形狀:每行有n個字符,其中 # 表示棋盤區域, . 表示空白區域(數據保證不出現多余的空白行或者空白列)。?
Output
對于每一組數據,給出一行輸出,輸出擺放的方案數目C (數據保證C<2^31)。
Sample Input
2 1 #. .# 4 4 ...# ..#. .#.. #... -1 -1Sample Output
2 1 #include <iostream> using namespace std; int visited[10]; char a[10][10]; int cnt ,num,n,k; void dfs(int r) {if(num == k) //如果棋子數達到k,那么計數器加一,并返回。{cnt++;return;}if(r >= n) return;//判斷邊界。for(int j = 0;j < n; j++){if(!visited[j] && a[r][j] == '#')//如果符合條件,則該位置可放棋子。{visited[j] = 1;num++; //標記為已訪問,棋子數加一。dfs(r+1);//深搜下一行visited[j] = 0;//如果深搜失敗或者棋子數目夠了,則撤銷標記。num--;} }dfs(r+1);//該行已經有棋子,深搜下一行。 } int main(){while(cin>>n>>k&&n != -1&&k != -1){for(int i = 0; i < n; i++)for(int j = 0 ; j < n; j++)cin>>a[i][j];cnt = num = 0;//別忘記每次都要初始化,這是多樣例題。dfs(0);//從第一行開始深搜。cout<<cnt<<endl;}return 0; }B - Perket
?
你有?NN?種配料,每種配料有酸度?SS?和苦度?BB?。用這些配料做成Perket時,總的酸度為所有配料酸度的乘積,總的苦度是所有配料苦度的和。你至少需要添加一種配料。
為了使口感適中,總的酸度和苦度之差的絕對值應該盡可能小,求這個最小值。
輸入
第一行?11?個整數?N \ (1\le N\le 10)N?(1≤N≤10)?—— 配料的數量。
接下來?NN?行每行?22?個整數?S_iSi??和?B_iBi??—— 每種配料的酸度和苦度。如果用所有配料來做Perket,總的酸度和苦度都?\le 10^9≤109?。
輸出
NN?行,每行?11?個整數 —— 所求的最小值。
| 1 3 10 | 7 |
| 2 3 8 5 8 | 1 |
| 4 1 7 2 6 3 8 4 9 | 1 |
C - 全排列
?
給定一個由不同的小寫字母組成的字符串,輸出這個字符串的所有全排列。 我們假設對于小寫字母有 'a' < 'b' < ... < 'y' < 'z',而且給定的字符串中的字母已經按照從小到大的順序排列。
輸入格式
輸入只有一行,是一個由不同的小寫字母組成的字符串,已知字符串的長度在?11?到?66?之間。
輸出格式
輸出這個字符串的所有排列方式,每行一個排列。要求字母序比較小的排列在前面。字母序如下定義:
已知?S = s_1s_2...s_k, T = t_1t_2...t_kS=s1?s2?...sk?,T=t1?t2?...tk?,則?S < TS<T?等價于,存在?p (1 \le p \le k)p(1≤p≤k),使得?s_1 = t_1, s_2 = t_2, ..., s_{p - 1} = t_{p - 1}, s_p < t_ps1?=t1?,s2?=t2?,...,sp?1?=tp?1?,sp?<tp??成立。
Sample Input
abcSample Output
abc acb bac bca cab cba #include<bits/stdc++.h> using namespace std; int main() {char s[66];cin>>s;do{for(int i=0;i<strlen(s);i++)cout<<s[i];cout<<endl;}while(next_permutation(s,s+strlen(s)));return 0; }D - 自然數拆分
對于任意大于?11?的自然數?nn,總是可以拆分成若干個小于?nn?的自然數之和。
現請你編寫程序求出?nn?的所有拆分。
輸入格式
輸入文件共一行,包含一個自然數,即要拆分的自然數?n(1 \le n \le 20)n(1≤n≤20)。
輸出格式
輸出文件有若干行,每行包含一個等式,即代表一種可行的拆分(格式與順序參見樣例)。
Sample Input
5Sample Output
5=1+1+1+1+1 5=1+1+1+2 5=1+1+3 5=1+2+2 5=1+4 5=2+3?
#include<cstdio> using namespace std; int n; int old[50]; void dfs(int sum,int cur){if(sum>n) return;if(sum==n){printf("%d=",n);for(int i=1;i<cur;i++){printf("%d+",old[i]);}printf("%d\n",old[cur]);return;}for(int i=old[cur];i<n;i++){old[cur+1]=i;//這個值就是下一層遞歸時所用到的i的起始值,這里old數組記錄下來dfs(sum+i,cur+1);//進入到下一層遞歸} } int main(){scanf("%d",&n);old[0]=1;dfs(0,0);return 0; }E - Prime Ring Problem
?
題意翻譯
輸入正整數 n,把整數 1,2,…,n 排成一個環,使得相鄰兩個整數之和均為素數。輸出時,從整數 1 開始逆時針排列。同一個環恰好輸出一次。n≤16,保證一定有解。
多組數據,讀入到EOF結束。
第 i 組數據輸出前加上一行Case i:
相鄰兩組輸出中間加上一個空行。
輸入樣例
6
8
輸出樣例
Case 1:
1 4 3 2 5 6
1 6 5 2 3 4
Case 2:
1 2 3 8 5 6 7 4
1 2 5 8 3 4 7 6
1 4 7 6 5 8 3 2
1 6 7 4 3 8 5 2
輸出格式提示
行末無空格
最后一個Case輸出后不換行
F - Red and Black
有一個長方形的房間,覆蓋了正方形的磁磚。每塊磁磚的顏色,要么是紅色,要么是黑色。一名男子站在一塊黑色的磁磚上。他可以從一塊磁磚移至相鄰四塊磁磚中的某一塊。但是,他不允許在紅色磁磚上移動,他只允許在黑色磁磚上移動。?
編寫一個程序,使得他允許重復上述的移動,判斷他所能到達的黑色磁磚的數量。?
輸入
輸入由多個數據集組成。數據集的起始行包含了兩個正整數 W 和 H;W 和 H 分別是 x- 和 y- 方向的磁磚數量。W 和 H 不超過 20 。?
在數據集中,還有 H 行,每行包含了 W 個字符。每個字符按如下方式表示一塊磁磚的顏色。?
'.' - 一塊黑色的磁磚?
'#' - 一塊紅色的磁磚?
'@' - 一名男子,站在一塊黑色磁磚上 (在一個數據集中,恰好出現一次)?
以包含兩個 0 的一行,表示輸入結束。?
輸出
對于每個數據集,程序應當輸出一行,包含他從初始磁磚所能抵達的磁磚數量 (包括初始磁磚自身)。
示例輸入
6 9 ....#. .....# ...... ...... ...... ...... ...... #@...# .#..#. 11 9 .#......... .#.#######. .#.#.....#. .#.#.###.#. .#.#..@#.#. .#.#####.#. .#.......#. .#########. ........... 11 6 ..#..#..#.. ..#..#..#.. ..#..#..### ..#..#..#@. ..#..#..#.. ..#..#..#.. 7 7 ..#.#.. ..#.#.. ###.### ...@... ###.### ..#.#.. ..#.#.. 0 0示例輸出
45 59 6 13 #include<stdio.h> #include<string.h> int next[4][2]={{1,0},{0,1},{-1,0},{0,-1}}; char a[30][30]; int book[30][30]; int i,j,w,h,x,y,s; void dfs(int x,int y); int main() {while(scanf("%d%d",&w,&h)!=EOF){memset(a,0,sizeof(a));memset(book,0,sizeof(book));s=1;for(i=0;i<h;i++)scanf("%s",a[i]);if(w==0&&h==0)break;for(i=0;i<h;i++)for(j=0;j<w;j++)if(a[i][j]=='@'){x=i;y=j;}dfs(x,y);printf("%d\n",s);} } void dfs(int x,int y) {int k,tx,ty;for(k=0;k<4;k++){tx=x+next[k][0];ty=y+next[k][1];if(tx>=0&&tx<h&&ty>=0&&ty<w&&book[tx][ty]==0&&a[tx][ty]=='.'){s++;book[tx][ty]=1;dfs(tx,ty);}} }G - Knight Moves
?
題目描述
原題來自:POJ 1915
題目描述
原題來自:POJ 1915
編寫一個程序,計算一個騎士從棋盤上的一個格子到另一個格子所需的最小步數。騎士一步可以移動到的位置由下圖給出。
輸入格式
第一行給出騎士的數量?nn。?
在接下來的?3n3n?行中,每?33?行描述了一個騎士。其中,
- 第一行一個整數?LL?表示棋盤的大小,整個棋盤大小為?L\times LL×L;
- 第二行和第三行分別包含一對整數?(x,y)(x,y),表示騎士的起始點和終點。假設對于每一個騎士,起始點和終點均合理。
輸出格式
對每一個騎士,輸出一行一個整數表示需要移動的最小步數。如果起始點和終點相同,則輸出?00。
樣例
?
樣例
?
| 3 8 0 0 7 0 100 0 0 30 50 10 1 1 1 1 | 5 28 0 |
數據范圍與提示
對于?100\%100%?的數據,有?4\le L\le 3004≤L≤300,保證?0\le x,y\le L-10≤x,y≤L?1
#include <bits/stdc++.h> using namespace std; int xx[]={-2,-2,-1,-1,1,1,2,2}; int yy[]={-1,1,-2,2,-2,2,-1,1}; int vis[300][300]; struct Node{int x;int y;int cnt; }; int main(){int n,L;cin>>n;int sx,sy,fx,fy;for(int i=0;i<n;i++){memset(vis,0,sizeof(vis));cin>>L;cin>>sx>>sy;cin>>fx>>fy;queue <Node> q;q.push((Node){sx,sy,0});while(!q.empty()){if(q.front().x==fx&&q.front().y==fy){cout<<q.front().cnt<<endl;break;}for(int i=0;i<8;i++){int dx=q.front().x+xx[i];int dy=q.front().y+yy[i];if(dx>=0&&dx<L&&dy>=0&&dy<L&&!vis[dx][dy]){q.push((Node){dx,dy,q.front().cnt+1});vis[dx][dy]=1;}}q.pop();}}return 0;}H - Oil Deposits
?
某公司負責探測地下油層,每次處理一個大的矩形區域。先創建一個網格,將土地劃分為許多方形塊,然后用傳感設備分別探測每個地塊,以確定該地塊是否含有石油。一塊含有石油的土地叫做pocket。如果兩個pocket邊相鄰或對角相鄰,則它們屬于同一油層的一部分。你的工作是確定在一個網格有多少不同的油層。
Input
輸入包含多組數據。每組數據都以包含m和n的一行開始,m和n是網格中行和列的數量(1 <= m <= 100,1 <= n <= 100),由一個空格分隔。如果m = 0,則表示輸入結束。下面是m行,每行有n個字符(不包括行尾字符)。每個字符對應一塊土地,要么是“*”,代表沒有油,要么是“@”,代表一個pocket。
Output
輸出網格有多少不同的油層。
Sample Input
1 1 * 3 5 *@*@* **@** *@*@* 1 8 @@****@* 5 5 ****@ *@@*@ *@**@ @@@*@ @@**@ 0 0Sample Output
0
1
2
2
J - 二叉樹先序遍歷
輸入一個整數n(n <= 100000),表示二叉樹中節點個數,編號為1~n。約定1號節點為二叉樹的根節點。然后輸入n行,每行包括兩個整數,第i行表示編號為i的節點的左子節點和右子節點的編號。如果某個節點沒有左子節點,那么對應輸行的第一個整數為0;如果某個節點沒有右子節點,那么對應行的第二個整數為0。
先序遍歷輸出此二叉樹每個節點的編號,每行輸出一個編號。
先序遍歷(DLR),是二叉樹遍歷的一種,也叫做先根遍歷、前序遍歷、前序周游,可記做根左右。前序遍歷首先訪問根節點然后遍歷左子樹,最后遍歷右子樹。
Input
第一行:一個整數n 接下來n行,每行有兩個整數
Output
輸出n行,每行一個整數,表示節點編號。
Sample Input
5 2 5 3 4 0 0 0 0 0 0Sample Output
1 2 3 4 5 #include <bits/stdc++.h> using namespace std; int n; const int MAX=1e5+10; int vis[MAX]; int r[MAX]; int l[MAX]; int b[MAX]; int cnt=1; void dfs(int t){b[cnt++]=t;if(l[t]){dfs(l[t]);}if(r[t]){dfs(r[t]);} } int main(){cin>>n;for(int i=1;i<=n;i++){cin>>l[i]>>r[i];}dfs(1);for(int i=1;i<cnt;i++){cout<<b[i]<<endl;}return 0; }K - 迷宮(一)
?
一天蒜頭君掉進了一個迷宮里面,蒜頭君想逃出去,可憐的蒜頭君連迷宮是否有能逃出去的路都不知道。
看在蒜頭君這么可憐的份上,就請聰明的你告訴蒜頭君是否有可以逃出去的路。
輸入格式
第一行輸入兩個整數?nn?和?mm,表示這是一個?n \times mn×m?的迷宮。
接下來的輸入一個?nn?行?mm?列的迷宮。其中?'S'?表示蒜頭君的位置,'*'表示墻,蒜頭君無法通過,'.'表示路,蒜頭君可以通過'.'移動,'T'表示迷宮的出口(蒜頭君每次只能移動到四個與他相鄰的位置——上,下,左,右)。
輸出格式
輸出一個字符串,如果蒜頭君可以逃出迷宮輸出"yes",否則輸出"no"。
數據范圍
1 \le n, m \le 101≤n,m≤10
Sample Input 3 4 S**. ..*. ***TSample Output
noSample Input 2
3 4 S**. .... ***TSample Output 2
yes #include<iostream> #include<cstring> #include<algorithm> #include<cstdio> #include<map> #include<set> #include<string> #include<stack> #include<queue> #include<vector> #include<math.h> using namespace std; typedef long long int ll; const int maxn=300; const int inf=1e7; int n,m; char dt[15][15]; int vis[15][15]; int flag=0; int dir[4][2]={{1,0},{-1,0},{0,-1},{0,1}}; bool pd(int x,int y)//判斷路是否能走 {return x>=1&&x<=n&&y>=1&&y<=m&&dt[x][y]!='*'&&vis[x][y]==0; } void dfs(int x,int y) {if(dt[x][y]=='T')//終點就退出 {flag=1;return ;}if(!pd(x,y)) return ;vis[x][y]=1;for(int i=0;i<4;i++){int nx=x+dir[i][0];int ny=y+dir[i][1];dfs(nx,ny);}return ; } int main() {int sx,sy;cin>>n>>m;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){cin>>dt[i][j];if(dt[i][j]=='S'){sx=i;sy=j;}}}dfs(sx,sy);if(flag==1) cout<<"yes"<<endl;else cout<<"no"<<endl; }L - 馬走日
?
馬在中國象棋以日字形規則移動。請編寫一段程序,給定n*m大小的棋盤,以及馬的初始位置(x,y),要求不能重復經過棋盤上的同一個點,計算馬可以有多少途徑遍歷棋盤上的所有點。
Input
第一行為整數T(T < 10),表示測試數據組數。每一組測試數據包含一行,為四個整數,分別為棋盤的大小以及初始位置坐標n,m,x,y。(0<=x<=n-1,0<=y<=m-1, m < 6, n < 6)
Output
每組測試數據包含一行,為一個整數,表示馬能遍歷棋盤的途徑總數,0為無法遍歷一次。
Sample Input
1 5 4 0 0Sample Output
32 #include <iostream> #include <cstring> using namespace std;const int N = 11; int vis[N][N], n, m, x0, y0, nm, ans = 0; int dir[8][2] = {{1,2},{-1,2},{1,-2},{-1,-2},{2,1},{2,-1},{-2,1},{-2,-1}};void dfs(int x, int y, int steps) {if (steps == nm) {ans++;return;} else {for (int i = 0; i < 8; ++i) {int tmpx = x + dir[i][0];int tmpy = y + dir[i][1];if (tmpx >= 0 && tmpy >= 0 && tmpx < n && tmpy < m && !vis[tmpx][tmpy]) {vis[tmpx][tmpy] = 1;dfs(tmpx, tmpy, steps + 1);vis[tmpx][tmpy] = 0;}}} }int main() {int t;scanf("%d", &t);while (t--) {memset(vis, 0, sizeof(vis));scanf("%d%d%d%d", &n, &m, &x0, &y0);nm = n * m, ans = 0;vis[x0][y0] = 1;dfs(x0, y0, 1);printf("%d\n", ans);}return 0; }M - 八皇后問題
?
努比亞和蘇丹沒有子女,所以他要從一些有集成資格的繼承者中挑選一個出來繼承王位。他希望這個繼承者足夠聰明,所以他準備了一個西洋棋盤,上面的每個格子中均有一個?1-991?99?的數字。他又準備了?88?個皇后棋子。
88?皇后的規則就是不能有任何棋子同行或者同列或者同斜線,在滿足這個規則的同時,王位繼承者還需要讓?88?個皇后所在的位置的數字的和是最大的。
輸入格式
輸入一個數字?k(k\leq 20)k(k≤20),代表棋盤的數量。
接下來有?kk?個棋盤,每個棋盤有?6464?個數字,分成?88?行?88?列出入,具體可見樣例,每一個數字均小于?100100。
輸出格式
每一個棋盤對應輸出最大的數值, 一共輸出?kk?行。
Sample Input
11 2 3 4 5 6 7 89 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 48 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64Sample Output
260 #include <bits/stdc++.h> using namespace std; int mp[10][10]; int lie[10]; int rl[30]; int lr[30]; int MAX=-1; int sum=0; void dfs(int t){if(t>8){MAX=max(MAX,sum);return ;}for(int i=1;i<=8;i++){if(!lie[i]&&!rl[t+i]&&!lr[i-t+8]){lie[i]=1;rl[t+i]=1;lr[i-t+8]=1;sum+=mp[t][i];dfs(t+1);sum-=mp[t][i];lie[i]=0;rl[t+i]=0;lr[i-t+8]=0;}} } int main(){int k;cin>>k;while(k--){MAX=-1;sum=0;memset(lie,0,sizeof(lie));memset(rl,0,sizeof(lie));memset(lr,0,sizeof(lie));for(int i=1;i<=8;i++){for(int j=1;j<=8;j++){cin>>mp[i][j];}}dfs(1);cout<<MAX<<endl;}return 0; }N - 選數
已知?nn?個整數?x_1,x_2,\cdots,x_nx1?,x2?,?,xn?,以及一個整數?kk(k<nk<n)。從?nn?個整數中任選?kk?個整數相加,可分別得到一系列的和。例如當?n=4n=4,k=3k=3,44?個整數分別為?33,77,1212,1919?時,可得全部的組合與它們的和為:
3+7+12=223+7+12=22
3+7+19=293+7+19=29
7+12+19=387+12+19=38
3+12+19=343+12+19=34
現在,要求你計算出和為素數共有多少種。
例如上例,只有一種的和為素數:3+7+19=293+7+19=29。
輸入格式
輸入格式為:nn,kk(1 \le n \le 20,k<n1≤n≤20,k<n)。
x_1,x_2,\cdots,x_nx1?,x2?,?,xn?(1 \le x_i \le 50000001≤xi?≤5000000)。
輸出格式
輸出格式為:一個整數(滿足條件的種數)。
Sample Input
4 3 3 7 12 19Sample Output
1 #include<iostream> #include<math.h> using namespace std; int x[20],n,k;//依照題目所設 bool isprime(int n){//判斷是否質數int s=sqrt(double(n));for(int i=2;i<=s;i++){if(n%i==0)return false;}return true; } int rule(int choose_left_num,int already_sum,int start,int end){//choose_left_num為剩余的k,already_sum為前面累加的和,start和end為全組合剩下數字的選取范圍;調用遞歸生成全組合,在過程中逐漸把K個數相加,當選取的數個數為0時,直接返回前面的累加和是否為質數即可if(choose_left_num==0)return isprime(already_sum);int sum=0;for(int i=start;i<=end;i++){sum+=rule(choose_left_num-1,already_sum+x[i],i+1,end);}return sum; } int main(){cin>>n>>k;for(int i =0;i<n;i++)cin>>x[i];cout<<rule(k,0,0,n-1);//調用遞歸解決問題 }O - 打開燈泡 Switch the Lamp On
達達是來自異世界的魔女,她在漫無目的地四處漂流的時候,遇到了善良的少女翰翰,從而被收留在地球上。
翰翰的家里有一輛飛行車。
有一天飛行車的電路板突然出現了故障,導致無法啟動。
電路板的整體結構是一個R行C列的網格(R,C≤500),如下圖所示。
每個格點都是電線的接點,每個格子都包含一個電子元件。
電子元件的主要部分是一個可旋轉的、連接一條對角線上的兩個接點的短電纜。
在旋轉之后,它就可以連接另一條對角線的兩個接點。
電路板左上角的接點接入直流電源,右下角的接點接入飛行車的發動裝置。
達達發現因為某些元件的方向不小心發生了改變,電路板可能處于斷路的狀態。
她準備通過計算,旋轉最少數量的元件,使電源與發動裝置通過若干條短纜相連。
不過,電路的規模實在是太大了,達達并不擅長編程,希望你能夠幫她解決這個問題。
注意:只能走斜向的線段,水平和豎直線段不能走。
Input
對于每組測試數據,第一行包含正整數R和C,表示電路板的行數和列數。
之后R行,每行C個字符,字符是"/"和"\"中的一個,表示標準件的方向。
Output
對于每組測試數據,在單獨的一行輸出一個正整數,表示所需的縮小旋轉次數。
如果無論怎樣都不能使得電源和發動機之間連通,輸出NO SOLUTION。
Example
樣例輸入
3 5 \\/\\ \\/// /\\\\樣例輸出
1Hint
1≤R,C≤500,
1≤T≤5
?
總結
- 上一篇: 企业合同协议大全1740个
- 下一篇: 利用Bing Search API进行搜