标签:char define 直接 max main 整数 输入 sample 八皇后
Input
Output
Sample Input
2 1 #. .# 4 4 ...# ..#. .#.. #... -1 -1
Sample Output
2 1
好久没更新题目了,没认真刷过题了,今天一个水题都写了这么久
类似八皇后的模板题、
贴一份开始自己想的代码,时间复杂度又长又水
定义了两个vis数组,想着只要开始让第一个数组补课访问就行,没有考虑清楚回溯,在回溯的时候因为你的cnt没变,一直增加,可能通过其他前面已经访问过的点增加cnt值,造成错误
#include<stdio.h> #include<string.h> #include<algorithm> #include<iostream> #include<cmath> #define ls (u<<1) #define rs (u<<1|1) #define maxn 1010 #define ll long long #define INF 1e9 using namespace std; #define max(a,b) (a)>(b)?(a):(b) #define min(a,b) (a)<(b)?(a):(b) int n,k,vis1[10][10],vis2[10][10],step; char mapn[10][10]; void dfs(int cnt){ if(cnt == k){ step ++; return; } if(cnt == 1){ memset(vis2,0,sizeof(vis2)); } for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ if(mapn[i][j] == ‘#‘ && !vis1[i][j] && !vis2[i][j]){ vis2[i][j] = 1; dfs(cnt + 1); } } } } int main(){ while(cin >> n >> k){ if(n == -1 && k == -1){ break; } step = 0; memset(vis1,0,sizeof(vis1)); for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ cin >> mapn[i][j]; } } for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ if(mapn[i][j] == ‘#‘){ vis1[i][j] = 1; dfs(1); } } } cout << step << endl; } return 0; }
注意这种写法,可以节省时间,直接以行dfs,然后一个循环竖行的值,找到一行中的值时又重新进入下一行
注意 同一行或同一列不能有其他棋子!!!连题目都没看清,果然水了很多
#include<stdio.h> #include<string.h> #include<algorithm> #include<iostream> #include<cmath> #define ls (u<<1) #define rs (u<<1|1) #define maxn 1010 #define ll long long #define INF 1e9 using namespace std; #define max(a,b) (a)>(b)?(a):(b) #define min(a,b) (a)<(b)?(a):(b) int n,k,vis[10],step,sum; char mapn[10][10]; void dfs(int cnt){ if(sum == k){ step ++; return; } if(cnt > n){ return; } for(int i=1;i<=n;i++){ if(mapn[cnt][i] == ‘#‘ && !vis[i]){ vis[i] = 1; sum ++; dfs(cnt + 1); sum --; vis[i] = 0; } } dfs(cnt + 1); } int main(){ while(cin >> n >> k){ if(n == -1 && k == -1){ break; } step = 0; sum = 0; memset(vis,0,sizeof(vis)); for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ cin >> mapn[i][j]; } } dfs(1); cout << step << endl; } return 0; }
标签:char define 直接 max main 整数 输入 sample 八皇后
原文地址:http://www.cnblogs.com/l609929321/p/7512491.html