| ||||||||||
| 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 | |||||||||
ft,到底是哪里错呢?老是wa...#include <iostream>
using namespace std;
bool Sright(char **draw,int n,int m,int a,int b,int x,int y,short depth);
bool Sleft(char **draw,int n,int m,int a,int b,int x,int y,short depth);
bool Sdown(char **draw,int n,int m,int a,int b,int x,int y,short depth);
bool Sup(char **draw,int n,int m,int a,int b,int x,int y,short depth);
bool Sleft(char **draw,int n,int m,int a,int b,int x,int y,short depth)//search left
{
int c=b-1;
if(!depth)
return false;
while(c>=0&&draw[a][c]=='*'){
if(Sdown(draw,n,m,a,c,x,y,depth-1)||Sup(draw,n,m,a,c,x,y,depth-1))
return true;
c--;
}
if(c>=0&&draw[a][c]==draw[x][y]){
draw[a][c]='*';
draw[x][y]='*';
return true;
}
return false;
}
bool Sright(char **draw,int n,int m,int a,int b,int x,int y,short depth)//search right
{
int c=b+1;
if(!depth)
return false;
while(c<m&&draw[a][c]=='*'){
if(Sdown(draw,n,m,a,c,x,y,depth-1)||Sup(draw,n,m,a,c,x,y,depth-1))
return true;
c++;
}
if(c<m&&draw[a][c]==draw[x][y]){
draw[a][c]='*';
draw[x][y]='*';
return true;
}
return false;
}
bool Sdown(char **draw,int n,int m,int a,int b,int x,int y,short depth)//search down
{
int c=a+1;
if(!depth)
return false;
while(c<n&&draw[c][b]=='*'){
if(Sleft(draw,n,m,c,b,x,y,depth-1)||Sright(draw,n,m,c,b,x,y,depth-1))
return true;
c++;
}
if(c<n&&draw[c][b]==draw[x][y]){
draw[c][b]='*';
draw[x][y]='*';
return true;
}
return false;
}
bool Sup(char **draw,int n,int m,int a,int b,int x,int y,short depth)//search up
{
int c=a-1;
if(!depth)
return false;
while(c>=0&&draw[c][b]=='*'){
if(Sleft(draw,n,m,c,b,x,y,depth-1)||Sright(draw,n,m,c,b,x,y,depth-1))
return true;
c--;
}
if(c>=0&&draw[c][b]==draw[x][y]){
draw[c][b]='*';
draw[x][y]='*';
return true;
}
return false;
}
int main()
{
int n,m;
char **draw;
char flag,finish;
cin>>n>>m;
while(n||n){
//initialize space
draw=new char*[n];
for(int i=0;i<n;i++)
draw[i]=new char[m];
for(int j=0;j<n;j++){
for(int k=0;k<m;k++)
cin>>draw[j][k];
}
flag=1,finish=0;
while(flag&&!finish){
flag=0;//no pairs can be taken away
finish=1;//no graph left
for(int a=0;a<n;a++){
for(int b=0;b<m;b++){
if(draw[a][b]=='*')
continue;
finish=0;
if(Sright(draw,n,m,a,b,a,b,3)||Sdown(draw,n,m,a,b,a,b,3)||
Sleft(draw,n,m,a,b,a,b,3)||Sup(draw,n,m,a,b,a,b,3)){
flag=1;
break;
}
if(a==0||a==n-1){
for(int k=b+1;k<m;k++){//right direction
if(draw[a][b]==draw[0][k]){
draw[a][b]='*';
draw[0][k]='*';
flag=1;
break;
}
if(draw[a][b]==draw[n-1][k]){
draw[a][b]='*';
draw[n-1][k]='*';
flag=1;
break;
}
}
for(int l=0;l<n;l++){//down direction
if(draw[a][b]==draw[l][0]){
draw[a][b]='*';
draw[l][0]='*';
flag=1;
break;
}
if(draw[a][b]==draw[l][m-1]){
draw[a][b]='*';
draw[l][m-1]='*';
flag=1;
break;
}
}
}
if(b==0||b==m-1){
for(int s=a+1;s<n;s++){//down direction
if(draw[a][b]==draw[s][0]){
draw[a][b]='*';
draw[s][0]='*';
flag=1;
break;
}
if(draw[a][b]==draw[s][m-1]){
draw[a][b]='*';
draw[s][m-1]='*';
flag=1;
break;
}
}
for(int t=0;t<m;t++){//right direction
if(draw[a][b]==draw[0][t]){
draw[a][b]='*';
draw[0][t]='*';
flag=1;
break;
}
if(draw[a][b]==draw[n-1][t]){
draw[a][b]='*';
draw[n-1][t]='*';
flag=1;
break;
}
}
}
}
}
}
if(finish)
cout<<"yes"<<endl;
else cout<<"no"<<endl;
/*
for(int i=0;i<n;i++){
for(int j=0;j<m;j++)
cout<<draw[i][j];
cout<<"\n";
}
*/
//delete space
for(int p=0;p<n;p++)
delete[] draw[p];
delete[] draw;
cin>>n>>m;
}
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator