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