栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

poj 3509 Rotating Rings

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

poj 3509 Rotating Rings

#include<stdio.h>int ring[1005][1005];int flag1,flag2;int minjudge1(int i,int j,int n){ int x,count=0; if(flag1==i-1||flag2==i-1) { for(x=flag1;x>i-1;x--) { if(ring[x-1][flag2]-ring[x][flag2]!=1) return 0; count++; if(count==n-i*2+1){flag1=x-1; return 1;} } flag1=x; for(x=flag2;x<n-i;x++) { if(ring[flag1][x+1]-ring[flag1][x]!=1) return 0; count++; if(count==n-i*2+1){flag2=x+1; return 1;} } flag2=x; for(x=flag1;x<n-i;x++) { if(ring[x+1][flag2]-ring[x][flag2]!=1) return 0; count++; if(count==n-i*2+1){flag1=x+1; return 1;} } } else { for(x=flag1;x<n-i;x++) { if(ring[x+1][flag2]-ring[x][flag2]!=1) return 0; count++; if(count==n-i*2+1){flag1=x+1; return 1;} } flag1=x; for(x=flag2;x>i-1;x--) { if(ring[flag1][x-1]-ring[flag1][x]!=1) return 0; count++; if(count==n-i*2+1){flag2=x-1; return 1;} } flag2=x; for(x=flag1;x>i-1;x--) { if(ring[x-1][flag2]-ring[x][flag2]!=1) return 0; count++; if(count==n-i*2+1){flag1=x-1; return 1;} } }}int minjudge2(int i,int j,int n){ int x,count=0; if(flag1==i-1||flag2==i-1) { for(x=flag1;x>i-1;x--) { if(ring[x-1][flag2]-ring[x][flag2]!=-1) return 0; count++; if(count==n-i*2+1){flag1=x-1; return 1;} } flag1=x; for(x=flag2;x<n-i;x++) { if(ring[flag1][x+1]-ring[flag1][x]!=-1) return 0; count++; if(count==n-i*2+1){flag2=x+1; return 1;} } flag2=x; for(x=flag1;x<n-i;x++) { if(ring[x+1][flag2]-ring[x][flag2]!=-1) return 0; count++; if(count==n-i*2+1){flag1=x+1; return 1;} } } else { for(x=flag1;x<n-i;x++) { if(ring[x+1][flag2]-ring[x][flag2]!=-1) return 0; count++; if(count==n-i*2+1){flag1=x+1; return 1;} } flag1=x; for(x=flag2;x>i-1;x--) { if(ring[flag1][x-1]-ring[flag1][x]!=-1) return 0; count++; if(count==n-i*2+1){flag2=x-1; return 1;} } flag2=x; for(x=flag1;x>i-1;x--) { if(ring[x-1][flag2]-ring[x][flag2]!=-1) return 0; count++; if(count==n-i*2+1){flag1=x-1; return 1;} } }}int maxjudge1(int i,int n){ int x,count=0; if(flag1==i-1||flag2==i-1) { for(x=flag1;x>i-1;x--) { if(ring[x-1][flag2]-ring[x][flag2]!=n) return 0; count++; if(count==n-i*2+1){flag1=x-1; return 1;} } flag1=x; for(x=flag2;x<n-i;x++) { if(ring[flag1][x+1]-ring[flag1][x]!=n) return 0; count++; if(count==n-i*2+1){flag2=x+1; return 1;} } flag2=x; for(x=flag1;x<n-i;x++) { if(ring[x+1][flag2]-ring[x][flag2]!=n) return 0; count++; if(count==n-i*2+1){flag1=x+1; return 1;} } } else { for(x=flag1;x<n-i;x++) { if(ring[x+1][flag2]-ring[x][flag2]!=n) return 0; count++; if(count==n-i*2+1){flag1=x+1; return 1;} } flag1=x; for(x=flag2;x>i-1;x--) { if(ring[flag1][x-1]-ring[flag1][x]!=n) return 0; count++; if(count==n-i*2+1){flag2=x-1; return 1;} } flag2=x; for(x=flag1;x>i-1;x--) { if(ring[x-1][flag2]-ring[x][flag2]!=n) return 0; count++; if(count==n-i*2+1){flag1=x-1; return 1;} } }}int maxjudge2(int i,int n){ int x,count=0; if(flag1==i-1||flag2==i-1) { for(x=flag1;x>i-1;x--) { if(ring[x-1][flag2]-ring[x][flag2]!=-1*n) return 0; count++; if(count==n-i*2+1){flag1=x-1; return 1;} } flag1=x; for(x=flag2;x<n-i;x++) { if(ring[flag1][x+1]-ring[flag1][x]!=-1*n) return 0; count++; if(count==n-i*2+1){flag2=x+1; return 1;} } flag2=x; for(x=flag1;x<n-i;x++) { if(ring[x+1][flag2]-ring[x][flag2]!=-1*n) return 0; count++; if(count==n-i*2+1){flag1=x+1; return 1;} } } else { for(x=flag1;x<n-i;x++) { if(ring[x+1][flag2]-ring[x][flag2]!=-1*n) return 0; count++; if(count==n-i*2+1){flag1=x+1; return 1;} } flag1=x; for(x=flag2;x>i-1;x--) { if(ring[flag1][x-1]-ring[flag1][x]!=-1*n) return 0; count++; if(count==n-i*2+1){flag2=x-1; return 1;} } flag2=x; for(x=flag1;x>i-1;x--) { if(ring[x-1][flag2]-ring[x][flag2]!=-1*n) return 0; count++; if(count==n-i*2+1){flag1=x-1; return 1;} } }}int judge(int n,int i){ int j; for(j=i-1;j<=n-i;j++) { if(ring[i-1][j]==n*(i-1)+i){flag2=j;flag1=i-1;break;} if(ring[n-i][j]==n*(i-1)+i){flag2=j;flag1=n-i;break;} if(ring[j][i-1]==n*(i-1)+i){flag1=j;flag2=i-1;break;} if(ring[j][n-i]==n*(i-1)+i){flag1=j;flag2=n-i;break;} } if(!minjudge1(i,j,n)) return 1; if(!maxjudge1(i,n)) return 1; j=flag2; if(!minjudge2(i,j,n)) return 1; if(!maxjudge2(i,n)) return 1; return 0;}int main(){ int cas,n,rn,i,j; for(cas=1;;cas++) { scanf("%d",&n); for(i=0;i<n;i++) for(j=0;j<n;j++) scanf("%d",&ring[i][j]); if(n==0) break; printf("%d. ",cas); if(n==1) { if(ring[0][0]==1) printf("YESn"); else printf("NOn"); continue; } if(n%2) rn=n/2+1; else rn=n/2; for(i=1;i<=rn;i++) if(judge(n,i)) break; if(i==rn+1)printf("YESn"); else printf("NOn"); } return 0;}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/378581.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号