POJ 1659 Frogs' Neighborhood(DFS)
2012-07-08 15:58
459 查看
题目链接
这个题1Y,还是想了几个剪枝63ms,如果直接去暴力的10*10的有点大,因为这相当于无向图,只须枚举一半就可以,也就是45个点,其实还是有点悬的,再加一个剪枝,中间加入判断把不符合情况的,直接淘汰。实习回来的第一个题,DFS调试了半天。。。
这个题1Y,还是想了几个剪枝63ms,如果直接去暴力的10*10的有点大,因为这相当于无向图,只须枚举一半就可以,也就是45个点,其实还是有点悬的,再加一个剪枝,中间加入判断把不符合情况的,直接淘汰。实习回来的第一个题,DFS调试了半天。。。
#include <stdio.h> #include <string.h> int p[101][101],o1[11],o2[11],z,n; void dfs(int x,int y) { int r,c,i,j; if(z) return ; if(o2[x] > o1[x]||o2[y] > o1[y]) return ; if(x > n) { for(i = 1; i <= n; i ++) { if(o2[i] != o1[i]) break; } if(i == n+1) { z = 1; printf("YES\n"); for(i = 1; i <= n; i ++) { for(j = 1; j <= n; j ++) { if(j == 1) printf("%d",p[i][j]); else if(j > i) printf(" %d",p[j][i]); else printf(" %d",p[i][j]); } printf("\n"); } } return; } if(y+1 >= x) { r = x+1; c = 1; } else { r = x; c = y+1; } o2[x] ++; o2[y] ++; p[x][y] = 1; dfs(r,c); p[x][y] = 0; o2[x] --; o2[y] --; dfs(r,c); } int main() { int i,t; scanf("%d",&t); while(t--) { scanf("%d",&n); z = 0; memset(p,0,sizeof(p)); memset(o2,0,sizeof(o2)); for(i = 1; i <= n; i ++) scanf("%d",&o1[i]); dfs(2,1); if(!z) printf("NO\n"); if(t != 0) printf("\n"); } }
相关文章推荐
- poj 1659 Frogs' Neighborhood (DFS)
- poj 1659 Frogs' Neighborhood
- poj 1659【Frogs' Neighborhood】
- POJ 1659 Frogs' Neighborhood (havel定理)
- poj 1659 Frogs' Neighborhood
- POJ1659 Frogs' Neighborhood
- poj 1659 Frogs' Neighborhood
- POJ 1659 Frogs' Neighborhood
- POJ 1659 Frogs' Neighborhood (贪心)
- POJ1659 Frogs' Neighborhood(Havel定理)
- POJ 1659 Frogs' Neighborhood
- POJ 1659 Frogs' Neighborhood【Havel算法】
- poj 1659 Frogs' Neighborhood (贪心 + 判断度数序列是否可图)
- poj1659 Frogs' Neighborhood
- POJ 1659 Frogs' Neighborhood
- Poj 1659 Frogs' Neighborhood 图的可图性判断
- poj 1659 Frogs' Neighborhood(判断序列可图)
- POJ 1659 Frogs' Neighborhood(可图性判定—Havel-Hakimi定理)【超详解】
- POJ1659 Frogs' Neighborhood
- POJ 1659 Frogs' Neighborhood(Havel-Hakimi定理)