zoukankan      html  css  js  c++  java
  • POJ 1321:棋盘问题

    考试周后的第一发 写搜索题找手感

    题意:给你一个n*n的棋盘及其放棋子的位置 给定旗子数目 问在满足条件下 能够有多少种不同放棋子的方法  写了一发DFS 差点写炸 不断搜索判断是否符合题意即可;

    #include<algorithm>
    #include<queue>
    #include<vector>
    #include<map>
    #include<stack>
    #include<set>
    #include<iostream>
    #include<cstring>
    #include<cstdio>
    using namespace std;
    typedef struct node {
    	int x;
    	int y;
    } node;
    char a[100][100];
    node b[100];
    int first[1005];
    int k;
    int sum=0;
    bool vis[100];
    void dfs(int e,int t,int l) {
    	int w;
    	t++;
    	if(t==1) {
    		vis[e]=1;
    	}
    	if(t==k) {
    		sum++;
    		return ;
    	}
    	for(int i=e+1; i<=l; i++) {
    		if(vis[i]==0) {
    			int flag=0;
    			w=e;
    			while(first[w]!=-1) {
    				if(b[i].x==b[w].x||b[i].y==b[w].y) {
    					flag=1;
    					break;
    				}
    				w=first[w];
    			}
    			if(flag==0) {
    				first[i]=e;
    				dfs(i,t,l);
    			}
    		}
    	}
    }
    int main() {
    	int n;
    	while(cin>>n>>k&&(n!=-1&&k!=-1)) {
    		int p=0;
    		memset(vis,0,sizeof(vis));
    		for(int i=1; i<=n; i++) {
    			getchar();
    			for(int j=1; j<=n; j++) {
    				scanf("%c",&a[i][j]);
    				if(a[i][j]=='#') {
    					p++;
    					node t;
    					t.x=i;
    					t.y=j;
    					b[p]=t;
    				}
    			}
    		}
    		b[0].x=0;
    		b[0].y=0;
    		sum=0;
    		first[0]=-1;
    		dfs(0,-1,p);
    		cout<<sum<<endl;
    	}
    	return 0;
    }
  • 相关阅读:
    Linux命令(25)userdel命令
    Linux命令(24)clear命令
    Linux命令(23)usermod命令
    Linux命令(22)useradd命令
    c++primer 练习9.28
    概率论python代码
    python自写软件(三)
    Linux描述符表和描述符高速缓存
    操作系统的坑(更新)
    python自写软件(二)
  • 原文地址:https://www.cnblogs.com/wang9897/p/7624385.html
Copyright © 2011-2022 走看看