| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
1 <= p * q <= 26 有可能p=1,q=26所以你的就太小了。In Reply To:这题的测试数据有问题吧!记录数组开10*10一直给我RE,开到100*100就AC了 Posted by:nan5515522 at 2014-06-26 08:39:59 > 一个这么水的DFS吃了快10次RE以为递归退出条件错了呢。。。。
> 后面做这题的兄弟记住了,别相信题中的数组大小,数组就是往大了开!
>
> #include <iostream>
> #include <algorithm>
> #include <cstdio>
> #include<queue>
> #include<vector>
> using namespace std;
>
> int dirX[] = {-2, -2, -1, -1, 1, 1, 2, 2};
> int dirY[] = {-1, 1, -2, 2, -2, 2, -1, 1};
>
> // int visit[10][10]; 这里10*10就RE改成下面的100*100就AC
> int visit[100][100]; 按理说9*9都足够了(0行0列没用)
>
>
> int size, p, q;
> int note1[100], note2[100];
>
> bool dfs(int x, int y, int pos)
> {
> int i, nextX, nextY;
> note1[pos] = x; note2[pos] = y;
> if(pos == p * q)
> return true;
> visit[x][y] = 1;
>
> for(i = 0; i < 8; i++)
> {
> nextX = x + dirX[i]; nextY = y + dirY[i];
> if(nextX >= 1 && nextX <= p
> && nextY >= 1 && nextY <= q)
> {
> if(visit[nextX][nextY] == -1 && dfs(nextX, nextY, pos + 1))
> return true;
> }
> }
> visit[x][y] = -1;
> return false;
>
> }
>
> int main()
> {
> int i, j,count = 1;
> bool flag;
> cin >> size;
> while(size--)
> {
> cin >> q >> p;
> for(i = 1; i <= p; i++)
> {
> for(j = 1; j <= q; j++)
> {
> visit[i][j] =-1;
> }
> }
>
> flag =false;
> for(i = 1; i <= p; i++)
> {
> for(j = 1; j <= q; j++)
> {
> if(dfs(i, j, 1))
> {
> flag = true;
> break;
> }
> }
> if(flag)
> break;
> }
> cout << "Scenario #" << count++ <<":" << endl;
> if(flag)
> {
> for(i = 1; i <= p * q; i++)
> cout << (char)(note1[i] - 1 + 'A') << note2[i];
> cout << endl;
> }
> else
> cout << "impossible" << endl;
> cout << endl;
>
> }
> return 0;
> }
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator