您的位置:首页 > 其它

poj 2965 dfs+保存路径

2014-01-02 20:51 211 查看
/***首先叙述题意,

经过最小的次数使得原来的图全部变成‘-’
暴力枚举
*****/
#include<iostream>
#include<cstring>
using namespace std;
char mat[15][15];
int mmin = 100000;
struct Node
{
int x,y;
}pre[100], pre2[100];
bool solve(int x,int y)
{
if(x<0||x>=4||y<0||y>=4)return false;
}
void turn(int id)
{
int n = id / 4;
int m = id % 4;

for(int i=0;i<4;i++)
{
mat
[i] == '+'?mat
[i] = '-':mat
[i] = '+';
if(i!=n)
mat[i][m] == '+'?mat[i][m] = '-':mat[i][m] = '+';
}
}
bool judge()
{
for(int i=0;i<4;i++)
for(int j=0;j<4;j++)
{
if(mat[i][j] != '-')
return false;
}
return true;
}

void dfs(int id,int cn)
{
if(judge())
{
if(cn < mmin){
mmin = cn;
memcpy(pre2, pre, sizeof(pre)); // 记录路径

}

return ;
}
if(id>=16)return ;
dfs(id+1,cn);
turn(id);
pre[cn + 1].x = id  / 4 + 1; // 记录路径
pre[cn + 1].y = id  % 4 + 1;
dfs(id+1,cn+1);
turn(id);
}

int main()
{
int n,m;
int icase;
char c;
for(int i=0;i<4;i++)
for(int j=0;j<4;j++)
{
cin>>mat[i][j];
}
dfs(0,0);
cout<<mmin<<endl;
for(int i = 1; i <= mmin; i++){
cout << pre2[i].x << " " << pre2[i].y << endl;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: