| ||||||||||
| 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 | |||||||||
第一个程序的DFS那里多了个else,所以就不同了...In Reply To:崩溃了...两个差不多的程序,还是想不出第一个WR在哪 Posted by:Bter at 2006-09-19 01:34:31 > Language:C++ Result:Wrong Answer
>
> Source
>
> #include <stdio.h>
>
> #define MAXN 5
>
> int fMap[MAXN][MAXN];
> int n, max;
>
> void changeState(int fi, int fj, int num, int revert)
> {
> int i, j;
>
> if (revert == 0) {
> fMap[fi][fj] = num;
> for (i = fi, j = fj + 1; j < n && fMap[i][j] != -1; j ++)
> if (fMap[i][j] == 0) fMap[i][j] = num;
> for (i = fi, j = fj - 1; j >= 0 && fMap[i][j] != -1; j --)
> if (fMap[i][j] == 0) fMap[i][j] = num;
> for (i = fi + 1, j = fj; i < n && fMap[i][j] != -1; i ++)
> if (fMap[i][j] == 0) fMap[i][j] = num;
> for (i = fi - 1, j = fj; i >= 0 && fMap[i][j] != -1; i --)
> if (fMap[i][j] == 0) fMap[i][j] = num;
> } else {
> for (i = 0; i < n; i ++)
> for (j = 0; j < n; j ++)
> if (fMap[i][j] == num) fMap[i][j] = 0;
> }
> }
>
> void DFS (int x, int y, int step, int tot)
> {
> if (tot > max) max = tot;
> if (x == n) return ;
> if (y == n) { DFS(x + 1, 0, step, tot); return ;}
> if (fMap[x][y] == 0) {
> changeState(x, y, step, 0);
> DFS(x, y + 1, step + 1, tot + 1);
> changeState(x, y, step, 1);
> } else
> DFS(x, y + 1, step, tot);
> }
>
> void main ()
> {
> char map[MAXN][MAXN];
> int i, j, p, q;
>
> while (1) {
> scanf("%d", &n);
> if (n == 0) break;
> for (i = 0; i < n; i ++) scanf("%s", map[i]);
> max = 0;
> for (i = 0; i < n; i ++)
> for (j = 0; j < n; j ++) {
> for (p = 0; p < n; p ++)
> for (q = 0; q < n; q ++)
> if (map[p][q] == '.') fMap[p][q] = 0;
> else fMap[p][q] = -1;
> DFS(i, j, 1, 0);
> }
> printf("%d\n", max);
> }
> }
>
> //////////////////////////////////
>
> Language:C++ Result:Accepted
>
> Source
>
> #include <stdio.h>
>
> int n , max ;
> int map[4][4];
>
> void changeState(int fi, int fj, int num, int revert)
> {
> int i, j;
>
> if (revert == 0) {
> map[fi][fj] = num;
> for (i = fi, j = fj + 1; j < n && map[i][j] != 1; j ++)
> if (map[i][j] == 0) map[i][j] = num;
> for (i = fi, j = fj - 1; j >= 0 && map[i][j] != 1; j --)
> if (map[i][j] == 0) map[i][j] = num;
> for (i = fi + 1, j = fj; i < n && map[i][j] != 1; i ++)
> if (map[i][j] == 0) map[i][j] = num;
> for (i = fi - 1, j = fj; i >= 0 && map[i][j] != 1; i --)
> if (map[i][j] == 0) map[i][j] = num;
> } else {
> for (i = 0; i < n; i ++)
> for (j = 0; j < n; j ++)
> if (map[i][j] == num) map[i][j] = 0;
> }
> }
>
> void find(int x , int y , int p , int tot)
> {
> if (tot > max) max = tot;
> if (x == n) return;
> if (y == n) { find(x + 1, 0, p, tot); return ;}
> if (map[x][y] == 0)
> {
> changeState(x, y, p, 0);
> find(x , y + 1, p + 1, tot + 1);
> changeState(x, y, p, 1);
> }
> find(x , y + 1, p, tot);
> }
>
> int main()
> {
> int i , j , x , y;
> char a[4][5];
>
> while (scanf("%d" , &n) == 1)
> {
> if (n == 0) break;
> for (i = 0; i < n; i ++) scanf("%s" , a[i]);
> max = 0;
> for (i = 0; i < n; i ++)
> for (j = 0; j < n; j ++)
> {
> for (x = 0; x < n; x ++)
> for (y = 0; y < n; y ++)
> if (a[x][y] == '.') map[x][y] = 0;
> else map[x][y] = 1;
> find(i , j , 2, 0);
> }
> printf("%d\n" , max);
> }
> return 0;
> }
>
>
>
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator