| ||||||||||
| 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 | |||||||||
我哪里错了??为什么WA?? 帮忙给看看:我的思路就是输入的时候将给数组编号1--(n-1)剩下的就是编号为5的点,我将其默认成为0
然后分别对编号0到n-1进行深度优先遍历,如果遍历一次还有编号为cur的没有被遍历到,直接退出,
我测试了所有的数据都是正确的,为什么WA呢?
#include <iostream>
#include <fstream>
using namespace std;
int n;
int a[300][300];
int mark[300][300];
int dx[4]={0,0,-1,1};
int dy[4]={1,-1,0,0};
bool isbound(int x,int y){
if(x>=0&&x<n&&y>=0&&y<n)return true;
return false;
}
void dfs(int x,int y){
mark[x][y]=1;
int node=a[x][y];
int i,j,k;
for(i=0;i<4;i++){
int curx=x+dx[i];
int cury=y+dy[i];
if(isbound(curx,cury)&&a[curx][cury]==node&&mark[curx][cury]==0){
dfs(curx,cury);
}
}
}
bool check(int p){
int i,j,k;
for(i=0;i<n;i++){
for(j=0;j<n;j++){
if(a[i][j]==p&&mark[i][j]==0)return false;
}
}
return true;
}
void main(){
// ifstream cin("data.txt");
while(1){
cin>>n;
int i,j,k;
if(n==0)break;
memset(a,0,sizeof(a));
memset(mark,0,sizeof(mark));
for(i=0;i<n-1;i++){
for(j=0;j<n;j++){
int x,y;
cin>>x>>y;
a[x-1][y-1]=i+1;
}
}
int cur=0;
bool test=true;
for(i=0;i<n&&test;i++){
for(j=0;j<n&&test;j++){
if(mark[i][j]==0&&a[i][j]==cur){
dfs(i,j);
if(check(cur)){
cur++;
}else{
test=false;
}
}
}
}
if(test)cout<<"good"<<endl;
else cout<<"wrong"<<endl;
}
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator