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(位置) { 满足'矩形'条件的字母,记录。然后把它所占位置置为'.'。 结果[总长-位置-1];//从后面开始,这样满足条件 dfs(位置+1); } 核心代码 void dfs(int k) { char **temp; temp=new char*[h];//存储用*代替位置的数组情况 for(int i=0;i<h;i++) { temp[i]=new char[w]; } if(k==number)//当前这种情况处理结束了,赋值,然后site加一 { result[site]=str; site++; return; } //判断当前的字母是否可以构成矩形 for(int i=0;i<26;i++) { if(letter[i]==0||letter[i]==2)//如果这种字母不存在,或者已经处理过了,0是不存在,2是处理过了。 continue; if(judge(sx[i],sy[i],ex[i],ey[i],i+'A')==0)//如果返回的是0,满足条件。返回1,说明不是矩形。 { for(int m=0;m<h;m++) { for(int j=0;j<w;j++) { temp[m][j]=store[m][j];//给temp数组赋值 if(store[m][j]-'A'==i)//将处理过的字母变成* store[m][j]='.'; } } letter[i]=2;//已经用过了,将其处理了。 str[number-k-1] = 'A' + i;//将得到的值赋到str字符数组中,最先出现的字母应该放到后面的位置 dfs(k+1);//找下一个位置了,从后面数 //不满足条件后,要恢复没有变化的情况 letter[i]=1; for(int m=0;m<h;m++) { for(int j=0;j<w;j++) { store[m][j]=temp[m][j];//把值重新付回去 } } } } //如果构成了,则把这些位置变成*,然后把letter所表示的位置改了 } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator